【发布时间】:2015-07-02 18:16:34
【问题描述】:
所以,我刚刚找到了一个可以在这个简单的子程序中演示的错误:
sub foo {
my $bar = shift or die "Missing bar", # <--- not a semicolon
my @items = ();
push @items, $bar;
return @items;
}
显然错误是子程序的第一行以逗号结尾。可以看出,这产生了一些相当不寻常的后果:
say foo(1); # 1
say foo(1); # 11
say foo(1); # 111
say foo(1); # 1111
现在,我知道这不是语法错误,因为逗号运算符的工作方式。我了解@items 未设置为(),因为未到达or 的右侧。我的问题是,在子例程内使用my 声明的变量如何允许数据在子例程调用之间保持不变?好像my 不知何故变成了our。
【问题讨论】: