STDINの挙動がよく分かりません
POST形式で読み込んだデータを3通りで書きだしてみました。しかしながら1番最初のファイルにしかデータは書き出されていません。
ひょっとしてSTDINはコンピュータがアクセスしてきた時の行を覚えていて、次のアクセスがあった時はそこから処理が行われるのでしょうか。それなら1度ファイルに全ての入力データを書き出した際にアクセスポイントはファイルの最後になっているから、2度目、3度目の書き出しの際はループが廻るはずがありません。
そこで書き出しまえに$-を書き出してみました。でも1度目のループを行う前から値は0。
前にファイルハンドル名など何かを付けなくては$-は死んでいるのかと思って、$=を書き出してみると60という値を取ります。でも書き出された1度目のループのファイルを数えてみると$=80なんです。何なんでしょう、この60という値は。
どうもSTDINの挙動が分からないのですが、どういう理由でこうなっているのか。どうしたら3回ループを廻すことが出来るのかご教授いただけないでしょうか。
**********************************************
#!/usr/bin/perl -d
use CGI;
use SR;
open(OUT,'>stdin_main.txt');
print OUT $-."\n";
print OUT $=."\n";
while(<STDIN>) {
print OUT $_;
}
close(OUT);
&SR::parse_form;
our $q=new CGI;
print $q->header(-charset=>'utf-8'),
$q->start_html(-charset=>'utf-8',
-lang=>'ja-JP'),
$-,"<br />\n",
$=,"<br />\n";
while(<STDIN>) {
print $_;
}
print $q->end_html;
**********************************************
package SR;
sub parse_form {
open(OUT,'>stdin_SR.txt');
print OUT $-."\n";
print OUT $=."\n";
while(<STDIN>) {
print OUT $_;
}
close(OUT);
}
1;
お礼
ありがとうございました。 解決いたしました。