in reply to Hash values and constants
From Programming Perl, pg. 108 under 'Comma Operator' (emphasis mine):
The => digraph is mostly just a synonym for the comma operator. It's useful for documenting arguments that come in pairs. It also forces any identifier to its immediate left to be interpreted as a string.
TESTVALUE to the left of '=>' is being treated as a string literal. You need to replace the '=>' with a comma.
Also, a bareword inside braces is considered a string literal unless you tell perl to evaluate it by prepending a '+'. So $hashValue = %hash1->{TESTVALUE}; should be $hashValue = %hash1->{+TESTVALUE};
Instead of writing %hash1->{1}, you could write $hash1{1}.
#!/usr/local/bin/perl -w use strict; use constant TESTVALUE => 1; my %hash1 = (TESTVALUE , "OK"); my %hash2 = (123 => TESTVALUE); my $hashValue; # Try 1 $hashValue = $hash1{1}; # Try 2 $hashValue = $hash1{+TESTVALUE}; # Try 3 $hashValue = $hash1{$hash2{123}};
Update:Fixed %hash2->{123} in last test.
--- print map { my ($m)=1<<hex($_)&11?' ':''; $m.=substr('AHJPacehklnorstu',hex($_),1) } split //,'2fde0abe76c36c914586c';
|
|---|