是什么区别($ test)=(@ test);和$ test = @test;在Perl?

时间:2016-05-31 10:05:03

标签: perl

($test) = (@test);
$test = @test;

在变量周围有一个括号,它会占据数组的第一个元素。我无法找到阵列周围支架的任何信息。

1 个答案:

答案 0 :(得分:14)

($test) = (@test); 

这会将@test内的值分配给仅包含$test的变量列表。因此$test将包含@test的第一个元素。那叫做列表上下文。您也可以省略@test附近的括号。

my @test = ('a', 'b');
my ($test) = @test;    # 'a'

这也常用于将函数的参数分配给变量。以下内容将为函数分配前三个参数,并忽略后面的任何其他参数。

sub foo {
    my ($self, $foo, $bar) = @_;

    # ...
}

您也可以跳过中间的元素。这也是有效的。此处不会分配bar值。

my @foo = qw(foo bar baz);
(my $foo, undef, my $baz) = @foo;
$test = @test;

这会强制@test进入标量上下文。标量上下文中的数组返回元素的数量,因此$test将成为整数。

my @test = ('a', 'b');
my $test = @test;      # 2

您可以在perldata中了解有关上下文的更多信息。