Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 对散列的散列的引用_Perl_Hash - Fatal编程技术网

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版本和操作系统。