【发布时间】:2010-06-03 20:54:55
【问题描述】:
好的,我了解 perl 哈希切片和 Perl 中的 the "x" operator,但是有人可以解释一下 here 中的以下代码示例(稍微简化)吗?
sub test{
my %hash;
@hash{@_} = (undef) x @_;
}
调用子示例:
test('one', 'two', 'three');
这句话让我很震惊:
@hash{@_} = (undef) x @_;
它正在创建一个哈希,其中键是 sub 的参数并初始化为 undef,所以:
%哈希:
'one' => undef, '二' => undef, '三' => undef
x 运算符的右值应该是一个数字; @_ 是如何被解释为子参数数组的长度的?我希望您至少必须这样做:
@hash{@_} = (undef) x scalar @_;
【问题讨论】:
-
length() 返回字符串的长度,而不是数组。请参阅 perldoc perlfunc。
-
更新示例以使用标量而不是长度 - 谢谢
-
FWIW,
@hash{@_} = ()是实现相同哈希初始化的更简单、更有效的方法。 -
我希望
undef @hash{@_}也能工作,但似乎 undef 并没有分布在表达式中的所有左值中。 :( -
@Ether,真的吗?正如我所料,在 5.10 下,
undef @h{@keys}会创建所有以前非existsing 的密钥。