取消引用传递给子例程的哈希引用

air*_*net 1 perl

我正在研究一些示例代码,我试图弄清楚为什么它与$ args周围的括号一起工作.没有它,我没有得到价值.

sub random_dice{
  my ($args) = @_;
  my $number_of_rolls = $args->{number_of_rolls} || 6;
  ...
}

# I don't understand why it works with the brackets around $args
my $r = random_dice({number_of_rolls=>5});
Run Code Online (Sandbox Code Playgroud)

Nat*_*ate 5

它的工作原理是因为您将匿名哈希传递给random_dice子例程.

my ($args) = @_; # sets $args as element of @_. Not as an array
Run Code Online (Sandbox Code Playgroud)

$ args现在是对哈希的引用

$args = {
   number_of_rolls => 5
};
Run Code Online (Sandbox Code Playgroud)

这通常用作在Perl中具有命名参数的方法