Perl 配列を置きかえるとき、次の配列とつなげて置き換えするには?ともう一つ
[上に]
[前に]
[次に]
!!!
[E-Mail]
2000/01/23(日) 17:21:35
CGIスクリプトのソースを意味がわかるように置きかえる
CGIスクリプトを作ろうとしているのですが、コメント
(置き換えのとき)やIF、
FORなど数行に渡っているものをどうすればいいか、
また、''の中の変数などを置き換えないようにするには
どうすればいいのでしょうか。
1.コメント
2.シングルクォーテーション
この二つを何とかしてください。
スクリプトはこれです。
#!/usr/local/bin/perl
open(IN, "okikae.cgi");#置換元スクリプト
open(OUT, "> kekka.txt");#置換結果
@data = <IN>;
@data =~ s/\n#(.*)\n/コメント $1/g;#問題地点
@data =~ s/print ([^;]*);/$1を表\示する/g;#printの置き換え
close(IN);
foreach $data (@data) {
print(OUT "$data");
}
close(OUT);
びぎな++
2000/01/24(月) 11:10:45
ちょっと興味があったので,考えています。初心者ですが・・・
コメント行以外にはPerlの改行を示す「;」がついていますから,
逆をついて,
--------------foreachの中----------------------
if ($data =~ s/\;//g) {print OUT "$data\n";}
$data =~ s/(.+$)\n/コメント $1/g;
print OUT "$data\n";
-----------------------------------------------
なんてするのはどうでしょう。表示は「コメント #〜〜・・・」となりますが。
その他については考え中です。(^^;
びぎな++
2000/01/24(月) 11:25:28
ごめんなさい!
これじゃfor文の中身も全部コメントになっちゃいますね。
やっぱりわたしにゃできません。(^^;
では。
ふじ
2000/01/24(月) 14:17:28
Perlは非常にいろんな書き方が出来る言語なので、
単純に「# があったらその後は行末までコメント」
等という処理ではおそらく追いつきません。
for (0..$#array){
s#hoge#fuga#g;
}
とか書けますし、行頭に # が付いていればコメントと見なせるかというと
print <<END;
# これはコメントじゃない
END
とかいう場合もあるし。
if や for などの {} (ブロック)があるものについては、
一文字ずつ見ていって { と } の数の対応を数えるという
手もありますが、これとて
s/\{/\[/g;
なんて場合もあるからエスケープも考慮しなくちゃいけないし・・・・
まともに作ろうと思ったら、Perl の構文解析エンジンと同等のものになるでしょう。
# Perl のソースを読む?(^^;
!!!
[E-Mail]
2000/01/29(土) 21:32:35
では、あきらめます。
[上に]
[前に]
[次に]