($ test)=(@test)之间的差异是多少?和$ test = @test;在Perl中?
问题描述:
($test) = (@test);
$test = @test;
在变量周围有一个支架,它将缓冲阵列的第一个元素。我无法找到任何有关阵列周围支架的信息。
答
($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
请参阅[小型教程:标量与列表赋值运算符](http://www.perlmonks.org/?node_id=790129) – ikegami