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