无法将关键字“ my”用作列表变量的范围

时间:2019-11-16 21:31:37

标签: perl

我通常不将my关键字用于作用域。但是我已经决定对子模块这样做。这是代码:

sub aros{
   open my $fh, shift;
   while(<$fh>){
   my @{"ar" . ++$i} = split unless /\A\s+\z/;
   }
}

目的是创建一个列表块,在其名称的末尾以递增的数字命名。并将它们专用于while循环(最接近的块)的范围。但是当我尝试编译时,会出现此错误:

Can't declare array dereference in "my" at ./a line 4, near "} ="

有人可以向我解释一下,“我”(面向范围的关键字)如何在内部起作用?我认为无论使用哪种名称,或者使用哪种类型(标量或列表),“ my”关键字都应将其设为私有。我猜错了吗?

1 个答案:

答案 0 :(得分:4)

def count_validation(answers, current): pass #write your validation logic here. current variable hold the input value 不是普通函数。紧随其后的必须是变量(或变量列表),而不是表达式。

您似乎正在动态创建变量名。不建议这样做,例如参见Why it's stupid to `use a variable as a variable name'

常见的方法是在开始循环之前声明数组。另外,要向数组中添加新元素,请使用question = [ inquirer.Text('count', message='Enter a number',validate=count_validation) ] 而不是分配给新索引-尚不清楚您要在数组中存储什么。

my