1

我正在研究一些示例代码,并试图弄清楚为什么它可以与 $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});
4

3 回答 3

5

它之所以有效,是因为您将匿名哈希传递给您的 random_dice 子例程。

my ($args) = @_; # sets $args as element of @_. Not as an array

$args 现在是对哈希的引用

$args = {
   number_of_rolls => 5
};

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

于 2013-04-02T20:27:09.353 回答
3

像这样:

my $args = @_;

赋值是在标量上下文中进行的,因此 $args 被赋值为 1(数组中的元素数)。

但是像这样:

my ($args) = @_;

分配是在列表上下文中进行的。右侧数组中的值被解包并分配给左侧数组的元素。

于 2013-04-02T20:30:27.060 回答
2

如果你想使用更简单的

my $r = random_dice( number_of_rolls => 5 );

潜艇必须改为

sub random_dice{
  my %args = @_;
  my $number_of_rolls = $args{number_of_rolls} || 6;
  ...
}
于 2013-04-02T20:34:10.830 回答