我正在向子程序发送一个哈希,并用它来获取它 my($arg_ref) = @_;
但到底是%$arg_ref
什么?是否%$
取消引用哈希?
$arg_ref
是一个标量,因为它使用了$
sigil.据推测,它拥有哈希引用.所以是的,%$arg_ref
哈希引用的deferences.写它的另一种方法是%{$arg_ref}
.这使得代码的意图更加清晰,尽管更加冗长.
引用来自perldata(1)
:
Scalar values are always named with '$', even when referring to a scalar that is part of an array or a hash. The '$' symbol works semantically like the English word "the" in that it indicates a single value is expected. $days # the simple scalar value "days" $days[28] # the 29th element of array @days $days{'Feb'} # the 'Feb' value from hash %days $#days # the last index of array @days
所以你的例子是:
%$arg_ref # hash dereferenced from the value "arg_ref"
my($arg_ref) = @_;
抓取函数参数堆栈中的第一项,并将其放在一个名为的局部变量中$arg_ref
.调用者负责传递哈希引用.一种更规范的写作方式是:
my $arg_ref = shift;
要创建哈希引用,您可以从哈希开始:
some_sub(\%hash);
或者您可以使用匿名哈希引用创建它:
some_sub({pi => 3.14, C => 4}); # Pi is a gross approximation.
您可以使用以下内容获取单个项目,而不是像这样取消引用整个哈希
$arg_ref->{key}