这两个定义有什么区别?

时间:2012-06-14 14:09:28

标签: perl perl-hash

为什么这是语法错误:

my @hash{1..4}=(1..4);

但不是这一个:

my %hash;
@hash{1..4}=(1..4);

3 个答案:

答案 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

第二个例子就是这样 - 在当前范围内声明一个哈希,然后访问它的一部分。