2008-03-13から1日間の記事一覧

7.17 一時ファイルを使用しないでファイルをその場で修正する

ファイルを更新モード("+ open(FH, "+<", $FILE) @array = <FH>; # change ARRAY here seek(FH, 0, 0); print FH @array; truncate(FH, tell(FH)); close(FH);</fh>

7.16 -iオプションを使用して、ファイルをその場で修正する

iオプションと-pオプションを使用 % perl -i.org -p -e "FILTER COMMAND' file1 file2 file3 ... プログラム内で使用 #!/usr/bin/perl -i.org -p # ここにフィルタコマンドを書く

7.15 一時ファイルを使用して、ファイルをその場で修正する

元のファイルを読み取り、修正を行い、修正した結果を一時ファイルに書き込む。そして、その一時ファイルの名前を変更して、元のファイルと同じ名前にする。 open(OLD, "<", $old) or die; open(NEW, ">", $new) or die; while(<OLD>) { # $_を修正する print NEW</old>…

7.14 Unixスタイルのフィルタプログラムを書く

コマンドラインにファイル名のリストを入力した場合は、それらを引数として受け取り、それらのファイルの中身を読み取る。コマンドラインにファイル名を入力しなかった場合、もしくは、"-"を入力した場合は、STDINから入力を受け取る。 <>演算子を使用 while…

7.13 複数のファイルをDATAエリアに埋め込む

CPAN Inline::Filesを慎重に使用する。 use Inline::FIles; while (<SETUP>) { # ... } while(<EXECUTE>) { # ... } __SETUP__ everything for the SETUP filehandle goes here. __EXECUTE__ everything for the EXECUTE filehandle goes here.</execute></setup>

7.12 プログラム内にファイルを埋め込む

プログラムコード後に、__DATA__トークン、もしくは__END__トークンを使用する。 DATAトークン while (<DATA>) { # 行単位の処理を書く } __DATA__ # データをこの場所に書く ENDトークン while(<main::DATA>) { # 行単位の処理を書く } __END__ # データをこの場所に書く</main::data></data>

7.11 一時ファイルを作成する

プログラムが終了した時点でファイルが自動的に削除されるようにしたい。 File::Tempモジュールのtempfile関数を使用する use FIle::Temp qw(tempfile); $fh = tempfile(); # $fhに対する処理を書く tempfile関数と一時ディレクトリを使用する use FIle::Tem…