この「無効なコンテキストでの変数の無用な使用」のケースを解決するにはどうすればよいですか?
例えば:
my $err = $soap_response->code, " ", $soap_response->string, "\n";
return $err;
「voidコンテキストでの変数の無用な使用」などの警告が表示されますか?なんで?どうすれば解決できますか?
引数を連結する場合は、"."
演算子またはjoin
:を使用します。
my $err = $soap_response->code. " ". $soap_response->string. "\n";
my $err = join '', $soap_response->code, " ", $soap_response->string, "\n";
次は、Perlが警告を出す理由です。
スカラー変数$err
に割り当てており、割り当ての右側はスカラーコンテキストで評価されます。
バイナリ" ,
"はコンマ演算子です。スカラーコンテキストでは、voidコンテキストで左の引数を評価し、その値を破棄してから、スカラーコンテキストで右の引数を評価し、その値を返します。
変数または定数を評価し、その値を破棄することは無意味です。そしてperlはこれについて警告します。
参考:コードで考えられるもう1つの問題:
my $err = $soap_response->code, " ", $soap_response->string, "\n";
割り当ての優先順位が高いため、次のようになります。
(my $err = $soap_response->code), " ", $soap_response->string, "\n";
詳細については、Perl演算子と優先順位およびコンマ演算子を参照してください。
I guess you wanted to concatenate the string pieces to form the entire error message, so you'll have to use the dot instead of comma:
my $err = $soap_response->code. " ". $soap_response->string. "\n";
my $err = join(' ', $soap_response->code, $soap_response->string) . "\n";
または、より良いIMO:
return sprintf "%s %s\n", $soap_response->code, $soap_response->string;
perldoc -f joinおよびperldoc -f sprintf perldoc perlopを参照してください。
警告については、perldoc perlopと、コンマ演算子に関するこのメモを参照してください。