2016-05-31 109 views
6
($test) = (@test); 
$test = @test; 

在变量周围有一个支架,它将缓冲阵列的第一个元素。我无法找到任何有关阵列周围支架的信息。

+2

请参阅[小型教程:标量与列表赋值运算符](http://www.perlmonks.org/?node_id=790129) – ikegami

回答

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阅读更多有关内容。

+4

可能会补充一点,这不是一个侥幸:许多Perl表达式返回不同的结果,具体取决于关于他们是否在列表上下文中。例如。这就是为什么我的$ match = $ var =〜/ con(。*)text /'不会在'$ match'中给你'$ 1'的值,而'my($ match)= $ var =〜/ con(。*)text /'会。 – reinierpost