perlでのNULL値を'0'(ゼロ)に変えるには?
[上に]
[前に]
[次に]
tomo_pyon
[E-Mail]
2000/03/17(金) 17:38:18
perlでNULL値を数字のゼロに変換したいのですが、
どのようにしたら良いですか?
びーだま
[E-Mail]
2000/03/17(金) 23:09:21
結構簡単そうで意味的には奥が深いですね。
読み違いが無いように補足してみます。
「NULL 値 が ”定義済みの”スカラー変数なら 0 に変換する。」
ということで良いですか?
逆に言うと「”未定義の”スカラー変数は、0 にしない」と
質問の内容を解釈しました。
で、サンプルコードは以下の通りです。
# undef $value;
$value = "";
$value += 0 if $value eq "" && defined($value);
print $value;
最初に、$value = ""; としたときと、undef $value; とした
ときで、出力結果が異なることに注目してください。
$value は "" (NULL値)なら、0 undef なら、未定義のままです。
ここで、$value = 0 とせずに、 $value += 0 としていることに
も一応意味があります。
0 が数値なのか、文字なのかを明示的に処理させるためです。
この場合は、数値であることを明示しています。
Perlでは文字単位でのデータ取り扱いがほとんどの作業だと
おもうので、通常あまりこの差が問題になることはありません
が、ビットごとの論理演算を行おうとしたときに違いが出て
きます。
びーだま
[E-Mail]
2000/03/17(金) 23:15:19
あ、質問をよーくみたら、'0' とありますね。
ということは、0 は文字ですね。
というわけで、
$value += 0 if $value eq "" && defined($value);
は、
$value = '0' if $value eq "" && defined($value);
が意味的には正しいです。
ちなみに、条件としては、本当は NULL だけじゃなくて、未定義
の場合もだよ。というなら以下のようにするので良いです。
文字としての 0 とする場合
$value = '0' unless $value;
数値としての 0 とする場合
$value += 0 unless $value;
びーだま
[E-Mail]
2000/03/17(金) 23:19:01
ごめんなさい、厳密には、
$value = '0' unless $value;
または、
$value += 0 unless $value;
とした時の条件は、
NULL, 未定義 と加えて 文字、あるいは 数値の 0 の時、
(それぞれの意味の)0 にする。
となります。
# 何度もごめんなさい。 書いたあとで気づくもので・・・(^^;
tomo_pyon
[E-Mail]
2000/03/21(火) 09:49:20
[[解決]]
ありがとうございました。
無事、処理できるようになりました。
[上に]
[前に]
[次に]