有几件事我 “知道” 的Perl:为什么标量子{(@x,@y)} - >()返回标量@y?
- 名单压扁
- 功能采取并返回列表
所以,如果我有这样的:
sub my_test {
my @x = qw(a b c);
my @y = qw(x y z t);
return (@x, @y);
}
say my_test; # a b c x y z t
say scalar my_test;
我期望两个结果值中的任一个:
7
,因为这是列表qw(a b c x y z t)
中有多少项目。事实上,这是我从scalar sub { @{[ qw(a b c x y z t) ]} }->()
得到的结果。't'
,因为如果你解释逗号作为逗号(叹息)你('a', 'b', 'c', 'x', 'y', 'z', 't')
计算结果为't'
。的确,这是我从scalar sub { qw(a b c x y z t) }->()
得到的结果。
你得到的却是'hellip; 4,没有警告。为什么我会混合列表拼合和逗号运算符?
类似的故事与哈希和这个相当流行的模式:
sub default_override_hash {
my %defaults = (foo => 'bar', egg => 'quuz');
my %values = @_;
my %overrides = (__baz => '');
return (%defaults, %values, %overrides);
}
scalar default_override_hash; # '1/8'
如何scalar
知道default_override_hash
返回了3个哈希,它不应该仅仅只得到%overrides
(而不是万能的,没有''
),但它的标量表示为散列?
我想我希望'标量'就像'sub my_scalar {my @input = @_;标量@scalar; }' – badp
相关:http://stackoverflow.com/q/8232951/133939 – Zaid