2007年11月18日日曜日

perlで文字列置換

HTMLファイルに記すタイムスタンプを更新する必要があった。
その際にファイルを1つずつ手書きで修正するのは大変なので、スクリプトを書いてみた。

#############################################################################
#!/usr/bin/perl
###--- HTMLファイルの文字列修正を行うPerlスクリプト ---###

### カレントディレクトリ(ディレクトリハンドルDIR)をオープンする ###
opendir(DIR,".") || die "cannot open a current directory:\n";

### カレントディレクトリのファイルを@files配列に格納する ###
@files = readdir(DIR);

### ディレクトリハンドル(DIR)を解放する ###
closedir(DIR);

### ファイルのリスト(@files)の要素を1つずつ$oldfileに読み込み操作する ###
foreach $oldfile (@files){
#.htmlという要素を含むファイルだけ操作する
if($oldfile =~/.html/) {
#$oldfileを読み取り専用に開く(ファイルハンドルはFHOLD)
if ( ! open ( FHOLD, "< $oldfile") ) {
print "File not found.\n";
exit(-1);
}
#$newfileを修正後のファイルの書き込み用に開く。ここで適当にファイル名を”temp"として与える
$newfile="temp";
if ( ! open ( FHNEW, "> $newfile") ) {
print "Cannot make file.\n";
exit(-1);
}
#修正するファイルを1行ずつ読み込み(特殊変数$_に格納される)文字列置換する
while (<FHOLD >){
$_ =~ s/置換したい文字列/新たに置き換えられる文字列/g;
#$newfileに一行ずつ書き込んでいく
print FHNEW $_;
}
#開けたら閉じる、ファイルハンドル
close(FHOLD);
close(FHNEW);
#元のファイル名の末尾に.origをつけて元のファイルを保存する
rename($oldfile,"$oldfile.orig");
#置換後の新しいファイルを元のファイル名に変更して保存する
rename($newfile,$oldfile);
}
}

0 件のコメント: