Hash Odds and Ends

Some operations on hashes aren't obvious if you're new to Perl. Because of the special nature of hashes, a couple of common operations require functions that aren't necessary for scalars and arrays.

Testing for Keys in a Hash

To test to see whether a key exists in a hash, for example, you might be tempted to try the following syntax:

if ( $Hash{keyval} ) {        # WRONG, in this case
    :
}

This example doesn't work, for a few reasons. First, this snippet doesn't test to see whether keyval is a key in a hash; it actually tests the value associated with the key keyval in the hash.

Does it work to test whether the key is defined, as in the following?

if ( defined $Hash{keyval} ) {    # WRONG, again in this case
    :
}

Again, this example doesn't quite work. This snippet still tests the data associated with the key keyval, and not whether the key exists. undef is a perfectly valid value to associate with a hash key, as in the following:

$Hash{keyval} = undef;

The preceding test of defined returns false because it doesn't test for the existence of a key in a hash; it tests the data associated with the key. So what's the right way? Perl has a special function just for this purpose; it's called exists. The exists function, shown here, tests for the presence of the hash key in the hash and returns true if it's there or false otherwise:

if ( exists $Hash{keyval} ) {    # RIGHT!
    :
}

Removing Keys from a Hash

The other operation that isn't obvious is removing a key from a hash. As you saw earlier, simply setting the hash element to undef doesn't work. To remove a single hash key, you can use the delete function, as follows:

delete $Hash{keyval};

To remove all the keys and values from a hash, simply reinitialize the hash to an empty list like this:

%Hash = ();

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.137.220.44