Perlの哲学 - Perlに対する誤解を解く

Perlの文字列比較演算子、eq,ne,gt,ge,lt,lは、シェルスクリプトの数値比較演算子が由来

Perlには、文字列比較演算子としてeq,ne,gt,ge,lt,leというキーワードがありますが、これはシェルスクリプト(sh,bash,csh,zsh,ksh)の数値比較演算子が由来です。

Perlの文字列比較演算子

Perlの文字列比較演算子です。文字列を辞書順で比較します。

# Perlの文字列比較演算子
$str1 eq $str2
$str1 ne $str2
$str1 gt $str2
$str1 ge $str2
$str1 lt $str2
$str1 le $str2

シェルスクリプトの数値比較演算子

シェルスクリプトの数値比較演算子です。

# シェルスクリプトの数値比較演算子
[$num1 -eq $num2]
[$num1 -ne $num2]
[$num1 -gt $num2]
[$num1 -ge $num2]
[$num1 -lt $num2]
[$num1 -le $num2]

Perlとシェルスクリプトのeq,ne,gt,ge,lt,leの比較

Perlの文字列比較演算子eq,ne,gt,ge,lt,leとシェルスクリプトのeq,ne,gt,ge,lt,leの比較してみましょう。キーワード名は、シェルスクリプトと同じものを使っているというところは同じですが、ずいぶん違います。

Perlの場合は、文字列比較を行っているのに対して、シェルの場合は数値比較を行っていますね。シェルクリプトの場合は演算子の前に「-」が必要なのと、比較演算子を「[]」で囲む必要があります。Perlの場合は、必要がありません。

Perlの場合は数値比較演算子はC言語と同じでした。C言語は数値計算などの処理スピードが求められる分野で活躍していますが、Perlは、ここから数値比較演算子を借用しています。

一方、文字列比較演算子には、シェルスクリプトにおける数値比較演算子を借用しました。eq,ne,gt,ge,lt,leという演算子は記号ではなく文字なので、文字列を比較する場合に連想しやすいというのがひとつの理由としてあります。