为什么这是语法错误:
my @hash{1..4}=(1..4);
但不是这一个:
my %hash;
@hash{1..4}=(1..4);
答案 0 :(得分:6)
第一个示例是词法范围的'my' + a hash slice,它预先假定可以以无效语法的切片方式声明哈希。你的第二个例子是合适的,首先声明哈希,假设你正在使用严格+警告;
答案 1 :(得分:5)
my
需要变量或parens中的变量列表作为参数。
@hash{1..4}
既不是那些,所以
my @hash{1..4}
是语法错误。
答案 2 :(得分:3)
第一个示例失败,因为哈希切片是返回某些结果的操作。显然,用my
声明来表示它是没有意义的,就像写my 2+2
这样的东西一样。 my
must be followed by list of variables to declare
第二个例子就是这样 - 在当前范围内声明一个哈希,然后访问它的一部分。