我正在研究一些示例代码,我试图弄清楚为什么它与$ 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});
答案 0 :(得分:5)
它的工作原理是因为您将匿名哈希传递给random_dice子例程。
my ($args) = @_; # sets $args as element of @_. Not as an array
$ args现在是对哈希
的引用$args = {
number_of_rolls => 5
};
这通常用作在Perl
中具有命名参数的方法答案 1 :(得分:3)
像这样:
my $args = @_;
赋值在标量上下文中进行,因此$ args被赋值为1(数组中元素的数量)。
但是像这样:
my ($args) = @_;
分配在列表上下文中进行。右侧数组中的值被解压缩并分配给左侧数组的元素。
答案 2 :(得分:2)
如果你想使用更简单的
my $r = random_dice( number_of_rolls => 5 );
sub必须改为
sub random_dice{
my %args = @_;
my $number_of_rolls = $args{number_of_rolls} || 6;
...
}