BlogもどきのWeblog

備忘録と日々の呟きとメモとCGIの実験場とされる何か。
プロフィール

GLANSHE
絵描き担当らしい

Total: 15183
Today: 73
Yesterday: 316
最新の記事

コンテンツ

最新のコメント

最新のトラックバック

カテゴリー

リンク

ニコ動MyListLink

[ perl ] open関数の読み書き両用モードの違い
Perlのopen関数でファイルを読み書き両用モードで開く為の記号は、次の3種類があります。

・+<
・+>
・+>>

それぞれの差を理解しないまま今までプログラムを書いてきましたが、いい加減調べたくなって調べてみました。
使ったのは以下のプログラムです。
$kigo = "+<" or "+>" or "+>>";

open(BBB, "$kigo$dir/test0.txt");
seek(BBB,0,0);
@strlist = <BBB>;
@strlist = reverse(@strlist);
seek(BBB,0,0);
foreach(@strlist){
print BBB "$_";
}
close(BBB);

open(READ, "<$dir/test0.txt");
print join('<br>',<READ>);
print "<br><hr>\n";
close(READ);


実際に作ったプログラムはこちら
open.cgi

その実行結果

以下自分が気付いたそれぞれの特徴

■+<
ファイルを開いた後も読める。
開いた直後のファイルポインタは先頭。
@strlist = <FH>;で読み込んだ後のファイルハンドルは末尾。
以前これで、12345の行にに098を書き込んだら09845になった事があったのけどこの結果ではそうなってない。何故?
とりあえずGoogle先生に聞いた限り、読んだ後でtruncateを使った方がよさげ。
truncate perlで検索

■+>
ファイルを開いた時点でファイルが新規作成されているので以前のファイルの内容は読めない。勘違いによるデータ消失に注意。
新規作成されているので、初期のファイルポインタは先頭(と同時に末尾)。
このモードは、新規作成で開いて、ファイルに何かデータを書き込んだ後、その書き込んだデータを再び読み込む事が出来るのが">"との最大の違い。

■+>>
ファイルを開いた後も読める。
但し、開いた直後のファイルポインタの位置が末尾。
seek(FH,0,0);で先頭に移動してやらないと、
@strlist = <FH>;で内容を読み込めないので注意。
但し、ファイルポインタを先頭に戻しても、書き込みをした場合、データが書き込まれるのは末尾からになる。つまり、中のデータを上書きする事は出来ない(と思う)。


間違いがあったら教えて欲しいかも。


■参考文献
とほほのperl入門(リファレンス編)
ファイルハンドルと出力[Perl講座]
Perl初心者コーナー Pert21


time stamp:2008/10/15 21:06:09
トラックバック(0)|コメント(0)
この記事のトラックバックURL:

コメントを書く
名前:
タイトル:
MAIL:
URL:
コメント:
PASS:
何かしら