文字列が空かどうかを確認するためにこのコードを使用しています。
if ($str == "")
{
// ...
}
また、等しくない演算子でも同じです...
if ($str != "")
{
// ...
}
これは機能しているように見えますが(それは正しいと思いますが)、それが正しい方法であるか、または予期しない欠点があるかどうかはわかりません。何かが正しくないように感じます。
Perlでの文字列比較には、eq
またはne
を使用します。
if ($str eq "")
{
// ...
}
==
および!=
演算子は、numeric比較演算子です。それらは比較する前に両方のオペランドを整数に変換しようとします。
詳細については、 perlop manページを参照してください。
Perlでの文字列の保存方法により、文字列の長さの取得が最適化されています。if (length $str)
は、文字列が空でないことを確認する良い方法です。
undef
に対してまだガードしていない状況にある場合、警告しない「空でない」のキャッチオールはif (defined $str and length $str)
です。
すでに数人が述べたように、eq
はここでの正しい演算子です。
スクリプトでuse warnings;
を実行すると、これに関する警告(およびその他の多くの有用なもの)が表示されます。 use strict;
もお勧めします。
「==」の代わりに「eq」を使用することをお勧めします。一部のEdgeのケースについて心配する場合は、未定義を確認することもできます。
if (not defined $str) {
# this variable is undefined
}
CPANを使用する以外に、何かを行うための「適切な」方法の概念そのものは、Perlには存在しません。
とにかくそれらは数値演算子ですので、
if($foo eq "")
または
if(length($foo) == 0)
空の文字列を確認するには、次のようにすることもできます
if (!defined $val || $val eq '')
{
# empty
}