19

如何解决这种“在无效上下文中无用使用变量”的情况?

例如:

  my $err = $soap_response->code, " ", $soap_response->string, "\n";
  return $err;

我收到诸如“在无效上下文中无用使用变量”之类的警告?为什么?我该如何解决?

4

3 回答 3

26

如果要连接参数,请使用"."运算符 or join

my $err = $soap_response->code. " ". $soap_response->string. "\n";
my $err = join '', $soap_response->code, " ", $soap_response->string, "\n";

接下来是 Perl 给你警告的原因。

您正在分配一个标量变量$err,并且分配的右侧在标量上下文中进行评估。

二进制“ ,”是逗号运算符。在标量上下文中,它在 void 上下文中评估其左参数,丢弃该值,然后在标量上下文中评估其右参数并返回该值。

评估一个变量或一个常量并丢弃该值是没有用的。perl 会警告你。

仅供参考:您的代码的另一个可能问题:

my $err = $soap_response->code, " ", $soap_response->string, "\n";

分配具有更高的优先级,因此是:

(my $err = $soap_response->code), " ", $soap_response->string, "\n";

有关详细信息,请参阅Perl 运算符和优先级以及逗号运算符

于 2010-02-26T14:21:31.243 回答
16

我猜你想连接字符串片段以形成整个错误消息,所以你必须使用点而不是逗号:

my $err = $soap_response->code. " ". $soap_response->string. "\n";
于 2010-02-26T14:13:59.983 回答
3
my $err = join(' ', $soap_response->code, $soap_response->string) . "\n";

或者,更好的国际海事组织:

return sprintf "%s %s\n", $soap_response->code, $soap_response->string;

请参阅perldoc -f joinperldoc -f sprintf perldoc perlop

关于警告,请参阅perldoc perlop关于逗号运算符的注释

于 2010-02-26T15:30:00.923 回答