「すぐ分かる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」カテゴリの記事
- 「すぐわかるPerl」 8.10 ディレクトリのリカーシブ処理(その2)(2009.02.24)
- 「すぐわかるPerl」 8.10 ディレクトリのリカーシブ処理(その1)(2009.02.23)
- 「すぐわかるPerl」 7.6 マッチした文字列と、その前後の文字列を扱う変数(2008.06.17)
- 「すぐわかるPerl」 8.9 コマンドの入出力に入出力を切り替える(2008.11.12)
- 「すぐわかるPerl」 8.8 標準入出力以外のファイルの制御(2008.10.08)









コメント