Каков правильный способ проверить, нет ли строки в 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
}