我通常不将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”关键字都应将其设为私有。我猜错了吗?
答案 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