Hash Odds and Ends

 <  Day Day Up  >  

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 = (); 

 <  Day Day Up  >  


SAMS Teach Yourself Perl in 24 Hours
Sams Teach Yourself Perl in 24 Hours (3rd Edition)
ISBN: 0672327937
EAN: 2147483647
Year: 2005
Pages: 241

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net