无法在我们的Perl中声明标量取消引用

kr98yfug  于 2022-11-24  发布在  Perl
关注(0)|答案(1)|浏览(143)

我声明了一个变量-

for($i = 0; $i <= 3; $i++)
{
    if(some condition) {
        my ${'file'.$i.'size'} = 0; }
}

我希望我的变量只声明如果它匹配的条件否则不。我希望它创建4个变量如file 1 size file 2size等,但我得到错误“不能在我的perl中声明标量解引用”。我哪里出错了?

unhi4e5o

unhi4e5o1#

你可以动态地创建包变量名(相对于词法(my)变量),但是it's a horrible idea。这是如此糟糕,以至于我们使用use strict;来告诉Perl禁止我们这样做。
您正在有效地构建阵列。

my @file_sizes;
for my $i ( 0 .. 3 ) {
   if ( some condition ) {
      $file_sizes[ $i ] = 0;
   }
}

这是否有意义是另一个问题。
就像您的原始代码一样,这会创建"洞",我指的是没有值的索引(undef为值)。这本身这不一定是错的,但是一个包含0, undef, 0或者undef, 0, 0的数组有什么意义呢?(即使零是其他数字)。也许你有并行数组。在这种情况下这可能是有意义的。但是使用并行数组是困难和烦人的,这使得它们容易出错。
所以,这段代码看起来很可疑,但是我没有可以用来改进它的信息。

相关问题