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