数字に「,」をいれるには?

[上に] [前に] [次に]
駆け出し 1998/04/08(水) 20:29:45
Perlで数値計算(足し算など)をしてその結果、
例えば $x=1234;  となり、
その $x を表示する際に 1,234 のように3桁目と4桁目に「,」を入れたいんです。
どのようにすればいいのか教えて下さい。

miyasiro 1998/04/08(水) 21:37:10
なんか懐かしいなぁ〜
それはともかく、$x が整数なら
 1 while $x =~ s/(\d+)(\d\d\d)/$1,$2/;
小数点が付くなら
 1 while $x =~ s/(^|[^.\d])(\d+)(\d\d\d)/$1$2,$3/;
ではいかがでしょう。
ちなみに、$x には、複数の数字があってもいいはずです。

駆け出し 1998/04/10(金) 03:31:21
[[解決]]
できました。ありがとうございました。

ところで、
 1 while $x =~ s/(\d+)(\d\d\d)/$1,$2/;
の”1 while”の部分はどういう意味なんですか?

B-Cus 1998/04/10(金) 04:00:38
&func while command;
なら、commandが成功し続ける間、&funcを呼び続けます。

ということは、$x =~ s/(\d+)(\d\d\d)/$1,$2/; が成功
している間は1を実行し続ける、というわけで。

つまり、「〜が失敗するまで〜を続ける」という定番の
書き方ですね。

駆け出し 1998/04/10(金) 23:53:25
ありがとうございます。仕組みはわかりました。
この場合 &func の所が 1 になってますけど、
1 にしているのはどういう意味なんですか?
(1を0や2に変えても結果が同じだったんで)

B-Cus 1998/04/11(土) 00:15:53
「1」は、いわゆるnopと同じで「何もしない」ということと思ってください。
whileを続けるかどうか決めるのは、1の部分じゃなくて
あくまでも s/// の結果です。

# 「1を評価しているんじゃなくて、1を実行しているわけです」
# と書こうとしたけど、サブルーチンの最後によく書く
#  1;
# というのは評価しているとも言えるし、1を実行っつーのもわけわからんし…。
# 誰かうまい説明をお願ひ。

miyasiro 1998/04/11(土) 02:07:38
うまい説明になるかどうかは分かりませんが…(^^;
while修飾子の前には式が要求されるんで(というか式の後に文修飾子が書ける)、
害のない簡単な式の代表として 1 を使うんだと思います。
で、1 は評価でいいんじゃないのかなぁ…
1 を評価して 1 という値を得て、これを捨てる…ってことで。

[上に] [前に] [次に]