-->
./
<!-- フラ&#65533;ュが見れな&#65533;のためにここに何か書&#65533; --> フラ&#65533;ュがインス&#65533;&#65533;ルされて&#65533;&#65533;たいで&#65533;&#65533;&#65533;

2009年10月29日

[Perl]コマンドラインでの実行をスクリプト化で確認

一行野郎(one-liner)はperlにおまかせ
-MO=Deparseでスクリプト化

ここで、-MO=Deparseも覚えておきましょう。perlにはさまざまなコマンドラインスイッチがあるので、複雑なものを利用した場合、実際に実行されるコードがどうなっているのかわかりにくくなったりしますが、これを使えば「もしコマンドラインではなく、スクリプトだったらどうなるか」を確認することできます。



 これはPerlをコマンドラインで使う上で、大きな発見を頂きました。
 次のようにコマンドラインから実行するとうまくいかず、変数展開がおかしいと疑っていたのですが、おかげで確認が出来ました。
u8w@u8w-desktop:~$ perl  -MO=Deparse -MFile::Find  -le  "find(\&xxx, './'); sub xxx{print qq($File::Find::name\n);}"
BEGIN { $/ = "\n"; $\ = "\n"; }
use File::Find;
find(\&xxx, './');
sub xxx {
    print "::Find::name\n";
}
-e syntax OK

 「\$File::Find::name」と変数名の頭をエスケープするとうまく行きました。
perl -e '$a="XXX"; print qq($a\n);'
のような通常の使い方の場合問題は出ないのですが、モジュールの変数を参照するときに「::」が含まれているのでおかしなことになるみたいです。時間を掛けて探し回ったのですが、解決方法は見つからず困っていました。



Powered by ScribeFire.

この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/33271468

この記事へのトラックバック