Я только что использовал этот код, чтобы проверить, пуста ли строка:
if ($str == "")
{
// ...
}
И то же самое с оператором не равно ...
if ($str != "")
{
// ...
}
Кажется, это работает (я думаю), но я не уверен, что это правильный способ или есть ли какие-либо непредвиденные недостатки. Что-то в этом не так.
perl
string
comparison
Ник Болтон
источник
источник
Из-за того, как строки хранятся в Perl, получение длины строки оптимизируется.
if (length $str)
- хороший способ проверить, что строка не пуста.Если вы находитесь в ситуации, от которой вы еще не позаботились
undef
, то самое главное для «непустого», который не предупреждает, - этоif (defined $str and length $str)
.источник
if (length($str))
это хороший подход, и он не дает сбоев, если переменная не определена.Вероятно, вы захотите использовать «eq» вместо «==». Если вы беспокоитесь о некоторых крайних случаях, вы также можете проверить undefined:
if (not defined $str) { # this variable is undefined }
источник
Как уже упоминалось несколькими людьми,
eq
это правильный оператор.Если вы
use warnings;
в своем скрипте, вы получите предупреждения об этом (и многих других полезных вещах); Я тоже рекомендуюuse strict;
.источник
use strict
но я обновляю какой-то старый код, поэтому, когда я добавляю его, я получаю сотни ошибок. Я, наверное, когда-нибудь их исправлю.Сама концепция «правильного» способа делать что-либо, кроме использования CPAN, в Perl не существует.
В любом случае это числовые операторы, вы должны использовать
if($foo eq "")
или
if(length($foo) == 0)
источник
if ($foo == "")
Например, тестирование пустых строк с использованием , безусловно, неверно, если вы на самом деле не хотите проверять$foo
, имеет ли значение 0, оцененное в числовом контексте (в этом случае его все равно лучше записать какif ($foo == 0)
, поскольку это более четко выражает ваше намерение).Чтобы проверить пустую строку, вы также можете сделать следующее
if (!defined $val || $val eq '') { # empty }
источник