- ベストアンサー
Perlで値が文字列か数値かを区別できる方法はありますか?
Perlで値が文字列か数値かを区別できる方法はありますか? 例えば、真偽値 $a = (3 == 3); $aは 1が返されるが、文字列の1か数値の1かどちらかかわからない。 $a = (2 == 3); $aは 空文字が返されるが、偽は空文字で正しいのか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
区別しようとすればできるでしょうけれど、 通常はそのようなことは行いません。 ご質問の($a == $b)などの場合ですが、 この場合はいわゆるブール値化された状態です。 (厳密には、変換演算子boolの適用下ではありませんが) その意味では、数値か文字かはあまり関係ないという状態です。 しいていえば、 偽は空文字と考えていいと思います。 1は、文字でも数値でもどちらでもある状態でしょうか。 普段、Perlは数値コンテキストか、文字コンテキストか(もしくはそれ以外か) によって、自動的に文字→数値、数値→文字の変換を行いますから、 特別に気を使うことは無いと思います。 逆に、強引に数値化コンテキストを通してみるなどして、 直後と直前で変化があったかなどを比較すれば、 元々どちらであったのか予想することはできると思います。 (直接、どちらであるか教えてくれる関数は無いと思います)