• ベストアンサー

このスクリプトの意味を教えてください。

大変恐縮なんですが、下記のスクリプトは何をしようとしているのか判りやすく教えて下さると助かります。 C言語やDelphiなどならわかるのですが、perlは全く知らないもので・・・ open(SRC, "a.u") || die; open(DST, "> a.v") || die; select DST; while (<SRC>) { if (/^`eval/) { s/$&//; eval; } else { print; } } close SRC; close DST; exit 0;

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

open(SRC, "a.u") || die; # ファイル"a.u"を読み込みのために開く (||失敗したらスクリプトを強制終了) open(DST, "> a.v") || die; # ファイル"a.v"を書き込みのために開く (||失敗したらスクリプトを強制終了) select DST; #標準出力を(STDOUTから)DST("a.v")に変更 while (<SRC>) {#ファイルハンドルSRCより行単位で読み出し if (/^`eval/) {# 行先頭が"`eval"と一致するか? s/$&//; マッチした部分を''に置換→"`eval"の削除 eval;# 行をPerlのコードとして実行 } else { print;# 行を標準出力に出力 } } close SRC; close DST; exit 0; ファイルa.uを読み、 `eval で始まる行は`evalより後ろをPerlのコードとして実行。 そうでない行はa.vに出力。 といったことをやってるようです。 `eval というのがなんとなく怪しげ… 微妙な記号違いで意味が違う(変わる)場合があります。

参考URL:
http://www.rfs.jp/sitebuilder/perl/index.html
lachesis-r
質問者

お礼

丁寧な回答ありがとうございます! 上記の意味は成る程わかったと思います(?)。 が、結局SRCの中の `eval の行がPerlのコードとは・・ これが難解でして・・汗 兎に角ありがとうございました。

その他の回答 (1)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

ファイル「a.u」の中の文字列を ファイル「a.v」に移す作業をしています。 ただし「`eval」と言う文字列があった場合は書き込まない。(`ってメタ文字じゃないよねぇ?たぶん・・・) open(SRC,"a.u"); @SRC = <SRC>; close(SRC); foreach $src (@SRC) { if ($src =~ /^`eval/) { $src = s/$&//; eval; } else { $DTS .= $src; } } open(DST,">a.v"); print DST $DST; close(DST); 書き直すとこんな感じですか? 間違っているかもしれないので、自信ないです。

lachesis-r
質問者

お礼

早速の回答ありがとうございます! 上記の意味はわかったと思います(?)。 ・・が、結局SRCの中の `eval の行がPerlのコードなんですね・・・・ ここがまたなんとも難解なので、目的には到達できませんね(汗

関連するQ&A