Как правильно проверить, является ли строка пустой в Perl? - PullRequest
85 голосов
/ 12 января 2010

Я только что использовал этот код, чтобы проверить, пуста ли строка:

if ($str == "")
{
  // ...
}

И то же самое с оператором неравных ...

if ($str != "")
{
  // ...
}

Кажется, это работает (я думаю), но я не уверен, что это правильный путь или есть какие-либо непредвиденные недостатки. Что-то просто не в порядке с этим.

Ответы [ 6 ]

121 голосов
/ 12 января 2010

Для сравнения строк в Perl используйте eq или ne:

if ($str eq "")
{
  // ...
}

Операторы == и != являются числовыми операторами сравнения. Они будут пытаться преобразовать оба операнда в целые числа, прежде чем сравнивать их.

См. Справочную страницу perlop для получения дополнительной информации.

87 голосов
/ 12 января 2010
  1. Благодаря тому, что строки хранятся в Perl, оптимизируется получение длины строки.
    if (length $str) - это хороший способ проверить, что строка не пуста.

  2. Если вы находитесь в ситуации, когда вы еще не защитились от undef, то универсальный «непустой», который не предупредит, - if (defined $str and length $str).

9 голосов
/ 12 января 2010

Как уже упоминалось несколькими людьми, eq - правильный оператор здесь.

Если вы use warnings; в своем скрипте, вы получите предупреждения об этом (и многих других полезных вещах);Я бы тоже порекомендовал use strict;.

9 голосов
/ 12 января 2010

Вы, вероятно, хотите использовать «eq» вместо «==». Если вы беспокоитесь о некоторых крайних случаях, вы можете также проверить неопределенность:

if (not defined $str) {

# this variable is undefined

}
4 голосов
/ 12 января 2010

Сама концепция «правильного» способа сделать что-либо, кроме использования CPAN, не существует в Perl.

В любом случае, это числовые операторы, вы должны использовать

if($foo eq "")

или

if(length($foo) == 0)
0 голосов
/ 06 ноября 2017

Чтобы проверить пустую строку, вы также можете сделать что-то следующее

if (!defined $val || $val eq '')
{
    # empty
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...