アプリ版:「スタンプのみでお礼する」機能のリリースについて

Perlで値が文字列か数値かを区別できる方法はありますか?

例えば、真偽値

$a = (3 == 3);

$aは 1が返されるが、文字列の1か数値の1かどちらかかわからない。

$a = (2 == 3);
$aは 空文字が返されるが、偽は空文字で正しいのか?

A 回答 (1件)

区別しようとすればできるでしょうけれど、


通常はそのようなことは行いません。


ご質問の($a == $b)などの場合ですが、
この場合はいわゆるブール値化された状態です。
(厳密には、変換演算子boolの適用下ではありませんが)

その意味では、数値か文字かはあまり関係ないという状態です。
しいていえば、
偽は空文字と考えていいと思います。
1は、文字でも数値でもどちらでもある状態でしょうか。


普段、Perlは数値コンテキストか、文字コンテキストか(もしくはそれ以外か)
によって、自動的に文字→数値、数値→文字の変換を行いますから、
特別に気を使うことは無いと思います。

逆に、強引に数値化コンテキストを通してみるなどして、
直後と直前で変化があったかなどを比較すれば、
元々どちらであったのか予想することはできると思います。
(直接、どちらであるか教えてくれる関数は無いと思います)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!