The perlref 文档的“使用引用”部分 http://perldoc.perl.org/perlref.html#Using-References解释说。
2.无论您将标识符(或标识符链)作为变量或子例程名称的一部分,都可以用返回正确类型引用的 BLOCK 替换标识符。换句话说,前面的例子可以这样写:
$bar = ${$scalarref};
push(@{$arrayref}, $filename);
${$arrayref}[0] = "January";
${$hashref}{"KEY"} = "VALUE";
&{$coderef}(1,2,3);
$globref->print("output\n"); # iff IO::Handle is loaded
就你而言,$records
必须是对哈希的引用(因为最外面的%
), {$records}
是一个返回引用的块,并且%{$records}
给出原始哈希值。
大括号包围着善意堵塞。事实上,你可以将上面的代码替换为
%{ if ($records) { $records } else { $default_records } }
但正如文档前面指出的那样,即使您的问题的较短版本也可以简化。
1.无论您将标识符(或标识符链)作为变量或子例程名称的一部分,都可以将标识符替换为包含正确类型引用的简单标量变量:
$bar = $$scalarref;
push(@$arrayref, $filename);
$$arrayref[0] = "January";
$$hashref{"KEY"} = "VALUE";
&$coderef(1,2,3);
print $globref "output\n";
Because $records
是一个简单的标量,%$records
是底层哈希。
如果相反$records
是对数组的引用,取消引用它的语法是@$records
or @{$records}
.