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

eal*_*eon 3 perl

我看了如何解决"在无效环境中无用地使用变量"的情况?它说要使用.连接这是我做的,但我仍然是警告.

在/ 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;  <---------
 ...
Run Code Online (Sandbox Code Playgroud)

不太确定如何在void上下文中修复无用的私有变量

谁知道怎么修它?


编辑:

78             $ooodata ? ($fl = $fl. "/.ooo_data") : ($fl = $fl. "/.ooo");
Run Code Online (Sandbox Code Playgroud)

如果它是一个? :问题那么为什么它不在78提出警告?

ike*_*ami 7

考虑什么时候会发生$ooolog错误.你最终执行了

$ooo;  # Useless
Run Code Online (Sandbox Code Playgroud)

我想你是想要的

$ooo = $ooolog ? $log . "/" . &getLog($log) : $ooo;
Run Code Online (Sandbox Code Playgroud)

但这样做更简单

$ooo = $log . "/" . &getLog($log) if $ooolog;
Run Code Online (Sandbox Code Playgroud)

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

$ooo;                  # Useless
Run Code Online (Sandbox Code Playgroud)

已被取代

$fl = $fl. "/.ooo";    # Not useless
Run Code Online (Sandbox Code Playgroud)

那说,

$ooodata ? ($fl = $fl. "/.ooo_data") : ($fl = $fl. "/.ooo");
Run Code Online (Sandbox Code Playgroud)

写得好得多

$fl .= $ooodata ? "/.ooo_data" : "/.ooo";
Run Code Online (Sandbox Code Playgroud)

如果你在一个条件运算符中有一个赋值,那你就做错了什么(一些次优和/或难以阅读的东西).