joe*_*joe 18 string perl warnings scope void
如何解决"无效使用void上下文中的变量"的情况?
例如:
my $err = $soap_response->code, " ", $soap_response->string, "\n";
return $err;
Run Code Online (Sandbox Code Playgroud)
我收到警告,例如"在void上下文中无用的变量"?为什么?我该如何解决?
Eug*_*ash 25
如果要连接参数,请使用"."运算符或join:
my $err = $soap_response->code. " ". $soap_response->string. "\n";
my $err = join '', $soap_response->code, " ", $soap_response->string, "\n";
Run Code Online (Sandbox Code Playgroud)
接下来是Perl为您提供警告的原因.
您正在分配标量变量$err,并且在标量上下文中评估赋值的右侧.
二进制" ,"是逗号运算符.在标量上下文中,它在void上下文中计算其左参数,抛出该值,然后在标量上下文中计算其右参数并返回该值.
评估变量或常数并抛弃该值是没有用的.而perl警告你这件事.
仅供参考:您的代码可能存在另一个问题:
my $err = $soap_response->code, " ", $soap_response->string, "\n";
Run Code Online (Sandbox Code Playgroud)
赋值具有更高的优先级,因此:
(my $err = $soap_response->code), " ", $soap_response->string, "\n";
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Perl运算符和优先级以及逗号运算符.
cod*_*ict 16
我想你想连接字符串片段以形成整个错误信息,所以你必须使用点而不是逗号:
my $err = $soap_response->code. " ". $soap_response->string. "\n";
Run Code Online (Sandbox Code Playgroud)