Как я могу решить этот случай «Бесполезное использование переменной в пустом контексте»? - PullRequest
18 голосов
/ 26 февраля 2010

Как я могу разрешить этот случай «Бесполезного использования переменной в пустом контексте»?

Например:

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

Я получаю предупреждения типа "Бесполезное использование переменной в пустом контексте"? Зачем? Как я могу решить это?

Ответы [ 3 ]

25 голосов
/ 26 февраля 2010

Если вы хотите объединить аргументы, используйте оператор "." или join:

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

Затем Perl предупреждает вас.

Вы присваиваете скалярной переменной $err, и правая часть присваивания оценивается в скалярном контексте.

Двоичный "," является оператором запятой. В скалярном контексте он оценивает свой левый аргумент в пустом контексте, отбрасывает это значение, затем оценивает свой правый аргумент в скалярном контексте и возвращает это значение.

Оценка переменной или константы и отбрасывание этого значения бесполезны. И Perl предупреждает вас об этом.

К вашему сведению: еще одна возможная проблема с вашим кодом:

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

Назначение имеет более высокий приоритет, так что:

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

См. Операторы Perl и приоритет и оператор Запятая для получения дополнительной информации.

16 голосов
/ 26 февраля 2010

Полагаю, вы хотели объединить фрагменты строк для формирования всего сообщения об ошибке, поэтому вам придется использовать точку вместо запятой:

my $err = $soap_response->code. " ". $soap_response->string. "\n";
3 голосов
/ 26 февраля 2010
my $err = join(' ', $soap_response->code, $soap_response->string) . "\n";

или, лучше ИМО:

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

См. perldoc -f join и perldoc -f sprintf perldoc perlop .

Что касается предупреждения, см. perldoc perlop и в этой заметке об операторе запятой .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...