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

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

Например:

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

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

18
задан Brian Tompsett - 汤莱恩 2 June 2015 в 20:53
поделиться

3 ответа

Если вы хотите объединить аргументы, используйте оператор "." или 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 и приоритет и Оператор запятая для получения дополнительной информации.

25
ответ дан 30 November 2019 в 06:50
поделиться
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 и это примечание к оператору запятой .

3
ответ дан 30 November 2019 в 06:50
поделиться

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

my $err = $soap_response->code. " ". $soap_response->string. "\n";
16
ответ дан 30 November 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: