プロが教える店舗&オフィスのセキュリティ対策術

大変恐縮なんですが、下記のスクリプトは何をしようとしているのか判りやすく教えて下さると助かります。

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;

A 回答 (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
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます!
上記の意味は成る程わかったと思います(?)。

が、結局SRCの中の `eval の行がPerlのコードとは・・
これが難解でして・・汗

兎に角ありがとうございました。

お礼日時:2005/05/29 10:05

ファイル「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);


書き直すとこんな感じですか?
間違っているかもしれないので、自信ないです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/05/29 10:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!