« 「すぐわかるPerl」5.6 めちゃめちゃ便利なeval | トップページ | 「すぐ分かるPerl」6.1 ファイルへの出力 »

2008年4月17日 (木)

「すぐ分かるPerl」5.7 文字列の置き換え

■*は渡せない

#calc -- 電卓プログラム 引数版
$x = eval($ARGV[0]);
print "$x\n";

の場合、*が数式の中に含まれるとエラーになる。
(Windows上で実行させた場合は大丈夫みたい)

これは、Unix等でファイル名をマッチさせる際のワイルドカードとして「*」が用いられるため。

■*をxで置き換える
*はOSとかシェル上の処理で必要なため、別の文字で置き換える。
形が似ているのでxで置き換える。

置き換えの場合には

$置換対象の文字列の変数 =~ s/置換前/置換後/g;

「=~」イコールチルダでワンセット。
s は substituteで「置き換え」
g はグローバルで「全体的に」

#calc -- 電卓プログラム 引数版
$ARGV[0] =~ s/x/*/g;
$x = eval($ARGV[0]);
print "$x\n";

これで

C:\Documents and Settings\sironekotoro>"C:\Documents and Settings\sironekotoro\デスクトップ\perl
test.pl" 2*3
6

となる。
ちなみに、実際に出たミスだけど

#calc -- 電卓プログラム 引数版
$ARGV[0] = ~ s/x/*/g;
$x = eval($ARGV[0]);
print "$x\n";

とすると・・・(つまり、= と ~ の間をあける)

C:\Documents and Settings\sironekotoro>"C:\Documents and Settings\sironekotoro\デスクトップ\perl
test.pl" 2*3
4294967295

となる。
なぜだ!?

それはともかく、dankogaiのblogとか見てると良く「s/なんたら/かんたら/g」ってのが出てくるけど、これは置換をしていたんだなぁ、と再認識。

|

« 「すぐわかるPerl」5.6 めちゃめちゃ便利なeval | トップページ | 「すぐ分かるPerl」6.1 ファイルへの出力 »

Perl」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/214806/40903183

この記事へのトラックバック一覧です: 「すぐ分かるPerl」5.7 文字列の置き換え:

« 「すぐわかるPerl」5.6 めちゃめちゃ便利なeval | トップページ | 「すぐ分かるPerl」6.1 ファイルへの出力 »