在void上下文Perl中无用的私有变量

时间:2017-09-29 09:22:20

标签: perl

我收到错误

Useless use of private variable in void context 

并且它位于仅包含}的行。但是,我假设它引用之前的行,即$final_value -= 4;。我启用了诊断以获取更多信息,并返回说You did something without a side effect in a context that does nothing with the return value 但是,如果我删除行$final_value -= 4;,错误就会停止,但我的程序不再起作用了。我可以忽略这一点并继续吗?

感谢。

编辑 - 这是代码的一部分

elsif($size_of_array == 2){
        if($array[0] > $array[1] && $array[0] >= 4){
            my $final_value = $array[0];
            for($final_value; $final_value > 0;){
                $line =~ s/(.*?)$/"$1\n" . ( q{ } x $final_value . "}")/e;
                $final_value -= 4;          
            }
        }
    }

1 个答案:

答案 0 :(得分:8)

'for'循环的语法错误。

Perl期望C样式,这意味着第一个'语句'应该初始化,第二个测试和第三个增量。

你的'初始化'没有做任何事情:你只是在void上下文中使用变量 - 这就是它警告你:

#!/usr/bin/env perl

use strict;
use warnings;

my $final_value = 10;

for ( $final_value; $final_value > 0; ) {
   $final_value -= 1;
}

如果您初始化$final_value或只是将其留空,则不会给您带来同样的错误。

for ( ; $final_value > 0; ) {

此时,您可以使用while循环。

或者,您可以向另一个方向前进:

for ( my $final_value = 10; $final_value > 0; $final_value -= 1) {
    print $final_value - 1;
}

for ( my $final_value = 10; $final_value--; ) {
    print $final_value;
}