【问题标题】:Perl Useless use of private variable in void contextPerl 在 void 上下文中对私有变量的无用使用
【发布时间】:2013-11-20 04:08:33
【问题描述】:

我查看了How can I resolve this case of "Useless use of a variable in a void context"?,它说使用 .连接这是我所做的,但我仍然是警告。

在 /mysz/bin/heer 第 79 行的 void 上下文中无用地使用私有变量。

 43 sub getLog {
 44     opendir(my $dh, $_[0]) || die "can't opendir $_[0]: $!";
 45     my @ooolog = grep {(/^\.oooo_log/)} readdir($dh);
 46     closedir $dh;
 47     return $ooolog[-1];
 48 }

 ...
 79             $ooolog ? ($ooo = $log. "/". &getLog($log)) : $ooo;  <---------
 ...

不太清楚如何修复在 void 上下文中无用的私有变量的使用

有人知道怎么解决吗?


编辑:

78             $ooodata ? ($fl = $fl. "/.ooo_data") : ($fl = $fl. "/.ooo");

如果它是? : 问题,那么它为什么不在 78 时发出警告?

【问题讨论】:

    标签: perl


    【解决方案1】:

    考虑当$ooolog 为假时会发生什么。你最终会执行

    $ooo;  # Useless
    

    我想你会去

    $ooo = $ooolog ? $log . "/" . &getLog($log) : $ooo;
    

    但是做起来更简单

    $ooo = $log . "/" . &getLog($log) if $ooolog;
    

    在添加的问题中,您不再收到警告,因为

    $ooo;                  # Useless
    

    已被替换为

    $fl = $fl. "/.ooo";    # Not useless
    

    也就是说,

    $ooodata ? ($fl = $fl. "/.ooo_data") : ($fl = $fl. "/.ooo");
    

    最好写成

    $fl .= $ooodata ? "/.ooo_data" : "/.ooo";
    

    如果您在条件运算符中进行了赋值,则说明您做错了(一些次优和/或难以阅读的事情)。

    【讨论】:

      【解决方案2】:

      您在第 79 行放置了一个表达式,但实际上您并没有对结果做任何事情。因此,它是无用的。

      一种更好(且无用)的方式来编写您的明显意图是:

      $ooo = $log. "/". &getLog($log) if $ooolog;
      

      【讨论】:

        【解决方案3】:

        直接写成

        if ($ooolog) { $ooo = $log. "/". &getLog($log) }
        

        或者它是表达式的一部分?

        添加答案:

        在第二个示例中,您有两个分配:如果 $oodata,要么

        $fl = $fl. "/.ooo_data"
        

        $fl = $fl. "/.ooo"
        

        但在第一个例子中,你所拥有的是,如果 $ooolog,要么

        $ooo = $log. "/". &getLog($log)
        

        $ooo
        

        最后一个$ooo 丢失了,没有人得到它的价值。它在一个空的上下文中,在那里写它是没有用的。这就是警告的意思。

        【讨论】:

        • 请查看添加的问题
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 2020-12-03
        • 2022-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多