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


94

私はこのコードを使用して、文字列が空かどうかを確認しています:

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

また、等しくない演算子と同じ...

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

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

回答:


133

Perlでの文字列比較には、eqまたはne

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

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

詳細については、perlopのマニュアルページを参照してください。


ええ、これを使用することはできますが、それがundefであり、警告を使用している場合はランタイム警告が表示されることに注意する必要があります。警告を回避する多くの方法が。
エヴァンキャロル

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

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


6
長さは、文字列には何もないという考えの表現に最も近いテストだと思います。
ブライアン

6
if (length($str))は良いアプローチであり、変数が定義されていなくても失敗しないため、賛成です。
basic

10

「==」の代わりに「eq」を使用したいと思うでしょう。いくつかのエッジケースについて心配する場合は、未定義をチェックすることもできます。

if (not defined $str) {

# this variable is undefined

}

1
要素が0の可能性がある配列をシフトして文字列を取得するときに非常に役立ちます。
Dacav

9

すでにいくつかの人が述べたように、eqここが正しいオペレーターです。

あなたの場合はuse warnings;、スクリプトで、あなたはこのことについて警告(および他の多くの有益なもの)を取得します。私use strict;もお勧めします。


+1クール、ええ、私は通常使用しますuse strictが、いくつかの古いコードを更新しているので、これを追加すると何百ものエラーが発生します。私はおそらくそれらをいつか修正するでしょう。
Nick Bolton

4

CPANの使用を除いて、何かを行う「適切な」方法の概念そのものは、Perlには存在しません。

とにかくそれらは数値演算子です、あなたは使うべきです

if($foo eq "")

または

if(length($foo) == 0)

3
Perlが問題解決に向けて「真の方法」を提唱する傾向がないことは事実ですが、それは、強く推奨されるイディオムやスタイルおよびアプローチがないということではありません。また、Perlの常連の1人が多くのことを言うのが好きなので、物事を行う方法が複数ある場合でも、物事を行ういくつかの方法は本当に、本当に悪い(愚かで、不適切な助言、保守が難しいなど) 。)
Telemachus 2010年

2
方法がたくさんあるからといって、すべての方法が同じであるとは限りません。使用して、空の文字列のテストはif ($foo == "")、例えば、ある決定的に間違っている、あなたが実際にいるかどうかをテストすることを意味しない限り、$foo数値コンテキストで評価され、それが思われる場合には0の値(持って、まだ良くのように書くことをif ($foo == 0)それがより明確にあなたを表現するように、意図)。
Dave Sherohman、2010年

0

空の文字列をチェックするには、次のようにすることもできます

if (!defined $val || $val eq '')
{
    # empty
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.