Perl 对散列的散列的引用
我有以下代码:Perl 对散列的散列的引用,perl,hash,Perl,Hash,我有以下代码: my $hhref = {'ancient' => {'Adam' => 'Eve', 'Antony' => 'Cleopatra'}, 'modern' => {'Clyde' => 'Bonnie'}}; print "$hhref->{'ancient'}{'Antony'}\n"; 打印出: REF(0x35c320)Cleopatra 我真的不明白为
my $hhref = {'ancient' => {'Adam' => 'Eve',
'Antony' => 'Cleopatra'},
'modern' => {'Clyde' => 'Bonnie'}};
print "$hhref->{'ancient'}{'Antony'}\n";
打印出:
REF(0x35c320)Cleopatra
我真的不明白为什么。为什么它不直接打印出《埃及艳后》?根据您使用的perl版本和操作系统的不同,您会得到稍微不同的结果。问题其实来自于打印语句中的引号。如果你的代码是
my $hhref = {'ancient' => {'Adam' => 'Eve',
'Antony' => 'Cleopatra'},
'modern' => {'Clyde' => 'Bonnie'}};
print $hhref->{'ancient'}{'Antony'};
print "\n";
然后它将正确打印。为什么?perl很难理解您的意思。你的意思是“$hhref”后跟“->{'againant'}{'Antony'}”,还是说“$hhref->{'againant'}”后跟“{'againant'}”,还是说它们都是一个变量?在字符串外部,编译器是精确的,但在字符串内部,它必须猜测您的意思,因为空格的使用方式不同,并且与代码中的空格不同
基本上,如果希望每次都能正确解释变量,那么就在perl中引用引号之外的变量。@Gambit2007在“插值”一段中提到了这种行为:“大部分时间”、“启发式估计器”、“不严格可预测”和“通常正确”这几个词本身就说明了问题!我觉得这不太对。考虑到它正在打印“克利奥帕特拉”,Perl显然是在正确地遍历数据结构。
REF(0x35c320)
必须由我们在这里没有看到的代码生成。您提到的文档是关于解析操作符中的文本的,如s//
——它与当前的情况无关。它是否真的打印REF(0x35c320)
?我从未见过Perl打印前面带有“REF”的引用。通常,它是一种引用类型——“HASH”、“ARRAY”或类似的东西。我没有得到额外的参考显示。如果您只运行这段代码,它还会显示额外的引用吗?我认为输出是由您没有向我们展示的其他代码生成的。如果此代码(仅此代码)生成您显示的输出,请添加您正在使用的Perl版本和操作系统。