web-dev-qa-db-ja.com

Perlで文字列が空かどうかを確認する適切な方法は何ですか?

文字列が空かどうかを確認するためにこのコードを使用しています。

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

また、等しくない演算子でも同じです...

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

これは機能しているように見えますが(それは正しいと思いますが)、それが正しい方法であるか、または予期しない欠点があるかどうかはわかりません。何かが正しくないように感じます。

85
Nick Bolton

Perlでの文字列比較には、eqまたはneを使用します。

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

==および!=演算子は、numeric比較演算子です。それらは比較する前に両方のオペランドを整数に変換しようとします。

詳細については、 perlop manページを参照してください。

121
Greg Hewgill
  1. Perlでの文字列の保存方法により、文字列の長さの取得が最適化されています。
    if (length $str)は、文字列が空でないことを確認する良い方法です。

  2. undefに対してまだガードしていない状況にある場合、警告しない「空でない」のキャッチオールはif (defined $str and length $str)です。

87
hobbs

すでに数人が述べたように、eqはここでの正しい演算子です。

スクリプトでuse warnings;を実行すると、これに関する警告(およびその他の多くの有用なもの)が表示されます。 use strict;もお勧めします。

9

「==」の代わりに「eq」を使用することをお勧めします。一部のEdgeのケースについて心配する場合は、未定義を確認することもできます。

if (not defined $str) {

# this variable is undefined

}
9
DmitryK

CPANを使用する以外に、何かを行うための「適切な」方法の概念そのものは、Perlには存在しません。

とにかくそれらは数値演算子ですので、

if($foo eq "")

または

if(length($foo) == 0)
4
whatsisname

空の文字列を確認するには、次のようにすることもできます

if (!defined $val || $val eq '')
{
    # empty
}
0
Roland Ayala