8.10. Hash Values
Another builtin that can sometimes be used in an lvalue manner is the values function for hashes, though only in Perl 5.005_04 and later. Specifically, in recent Perls the values function returns a list of the original values of the hash, not a list of copies (as it did in Perl 5.005_03 and earlier). This list of lvalues cannot be used in direct assignments: values(%seen_files) = ( ); # Compile-time error but it can be used indirectly: in a for loop. That is, if you need to transform every value of a hash in some generic fashion, you don't have to index repeatedly within a loop: for my $party (keys %candidate_for) { $candidate_for{$party} =~ s{($MATCH_ANY_NAME)} {\U$1}gmxs; } You can just use the result of values as individual lvalues: for my $candidate (values %candidate_for) { $candidate =~ s{($MATCH_ANY_NAME)} {\U$1}gxms; } The performance of the values-based version is also better. The loop's iterator variable is directly aliased to each hash value, so there's no need for (expensive) hash loop-ups inside the loop. Stick with the indexing approach, however, if your code also has to support pre-5.6 compilers. |