【发布时间】:2012-06-14 14:09:28
【问题描述】:
为什么是语法错误:
my @hash{1..4}=(1..4);
但不是这个:
my %hash;
@hash{1..4}=(1..4);
【问题讨论】:
为什么是语法错误:
my @hash{1..4}=(1..4);
但不是这个:
my %hash;
@hash{1..4}=(1..4);
【问题讨论】:
第一个例子是一个词法范围的'my' +一个hash slice,它预先假设可以以无效语法的切片方式声明哈希。你的第二个例子是合适的,首先声明哈希,假设你正在使用严格 + 警告;
【讨论】:
perl -E '%h{1..4}=(); say for keys %h;'。 OP 的问题是您不能 my 在同一语句中声明 和 访问元素。
%hash 的不存在确定为问题,而不是语法上拙劣的声明作为问题。
my 需要一个变量或括号中的变量列表作为参数。
@hash{1..4}
两者都不是,所以
my @hash{1..4}
是语法错误。
【讨论】:
第一个例子失败了,因为哈希切片是一个返回一些结果的操作。显然,用my 声明附加它是没有意义的,就像写my 2+2 这样的东西不会。 my must be followed by list of variables to declare.
第二个例子就是这样做的——在当前范围内声明一个哈希,然后访问它的一部分。
【讨论】:
$a 也是一个返回一些结果的操作,但是你可以在它前面放置一个my。这不是一个正确的答案,虽然很接近。
my 的确切有效范围。
my $x, $y 没有按照你说的那样做。)
my的链接,所以我不必完全引用它。