我声明了一个变量-
for($i = 0; $i <= 3; $i++) { if(some condition) { my ${'file'.$i.'size'} = 0; } }
我希望我的变量只声明如果它匹配的条件否则不。我希望它创建4个变量如file 1 size file 2size等,但我得到错误“不能在我的perl中声明标量解引用”。我哪里出错了?
unhi4e5o1#
你可以动态地创建包变量名(相对于词法(my)变量),但是it's a horrible idea。这是如此糟糕,以至于我们使用use strict;来告诉Perl禁止我们这样做。您正在有效地构建阵列。
my
use strict;
my @file_sizes; for my $i ( 0 .. 3 ) { if ( some condition ) { $file_sizes[ $i ] = 0; } }
这是否有意义是另一个问题。就像您的原始代码一样,这会创建"洞",我指的是没有值的索引(undef为值)。这本身这不一定是错的,但是一个包含0, undef, 0或者undef, 0, 0的数组有什么意义呢?(即使零是其他数字)。也许你有并行数组。在这种情况下这可能是有意义的。但是使用并行数组是困难和烦人的,这使得它们容易出错。所以,这段代码看起来很可疑,但是我没有可以用来改进它的信息。
undef
0, undef, 0
undef, 0, 0
1条答案
按热度按时间unhi4e5o1#
你可以动态地创建包变量名(相对于词法(
my
)变量),但是it's a horrible idea。这是如此糟糕,以至于我们使用use strict;
来告诉Perl禁止我们这样做。您正在有效地构建阵列。
这是否有意义是另一个问题。
就像您的原始代码一样,这会创建"洞",我指的是没有值的索引(
undef
为值)。这本身这不一定是错的,但是一个包含0, undef, 0
或者undef, 0, 0
的数组有什么意义呢?(即使零是其他数字)。也许你有并行数组。在这种情况下这可能是有意义的。但是使用并行数组是困难和烦人的,这使得它们容易出错。所以,这段代码看起来很可疑,但是我没有可以用来改进它的信息。