Perl:哈希键中的常量值

chr*_*s01 4 perl hash constants

我有点吃惊.如果我使用常量来表示哈希键Perl不使用该值.我需要把它放在它前面以实现这一目标.

use constant A => "a";
use constant B => "b";

my %h = (A => "1", &B => "2");

print "\n". A . ", " . B;
foreach (sort (keys (%h)))
{
    print "\n"  . $_ . "=" . $h {$_};
}
Run Code Online (Sandbox Code Playgroud)

输出:

a, b
A=1
b=2
Run Code Online (Sandbox Code Playgroud)

但我希望(第二行不同).

a, b
a=1
b=2
Run Code Online (Sandbox Code Playgroud)

没有&时使用常量进行哈希键的任何方法吗?

感谢帮助!

cho*_*oba 5

它的记录在不断下注意事项.

常用的方法是使用():

my %h = (A => "1", B() => "2");
Run Code Online (Sandbox Code Playgroud)

或切换到"非字符串化的逗号"(或简单的逗号):

my %h = (A => "1", B ,=> "2");
Run Code Online (Sandbox Code Playgroud)

使用&不会内联常量,因为您可以使用B :: Deparse进行验证:

$ perl -MO=Deparse ~/1.pl
sub B () { 'b' }
use constant ('A', 'a');
use constant ('B', 'b');
my(%h) = ('A', '1', &B, '2');
print "\na, b";
foreach $_ (sort keys %h) {
    print "\n" . $_ . '=' . $h{$_};
}
/home/choroba/1.pl syntax OK
Run Code Online (Sandbox Code Playgroud)