2016-05-31 101 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