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;
No.1ベストアンサー
- 回答日時:
STDIN に限らず, ファイルハンドルに対する <> 演算子は (スカラーコンテキストでは) 「1行読み込む」という動作をします. 次に <> で読み込むことを考えると, 当然「次の行に進む」ことになっていないとおかしいですよね.
諦めて配列に保存してください.
ありがとうございます。
<STDIN>は配列にいれるようにします。
調べてみたところ、$=は「write関数でフォーマット出力時の現在のページ行数」で、ループが幾ら廻っても、データの行数が何行であっても、フォーマットが60行とあれば、$=の値は60です。
$-は「write関数でフォーマット出力時の現在のページの残行数」で、printでは値が動きませんがwriteしてみると動きました。
ありがとうございます。
****************************
#!/usr/bin/perl
my ($all,$rest);
format =
rest: @<<
$rest
.
open(IN,'stdin_main.txt');
while(<IN>) {
$rest=$-;
write;
}
close(IN);
open(IN2,'stdin_main.txt');
while(<IN2>) {
print $-."\n";
}
close(IN2);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
while(<ハンドラ>) {} で行数を...
-
perlで、文字列の中から何番目...
-
オープンしたファイルで行の連結
-
ファイルから読み込んだ文字を
-
perlのflock関数でロックをかけ...
-
close()で例外が投げられる理由
-
AutoCADのスクリプト
-
テキストファイルの本文中に行...
-
cgiの投票回数制限設定について...
-
batファイルでrenameができませ...
-
エラー 'dir.h' : No such fi...
-
HTMLのフォームで画像と文...
-
ExcelをCSV書き出す場合のシー...
-
awkスクリプトでダブルクォーテ...
-
Perlの変数に文字数制限(容量...
-
readdir()で得られるファイル・...
-
ファイル全てを .xlsm に変更し...
-
パスから最後のディレクトリだ...
-
テキストデータから指定した1...
-
一定時間が経過したフォルダの削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
perlのflock関数でロックをかけ...
-
改行コードが勝手に
-
巨大ファイルの行をを逆順に並...
-
オープンしたファイルで行の連結
-
Perl で syntax error
-
where can I buy snowbord in t...
-
open中のファイルをrename
-
perlを用いた特定文字列間の抽...
-
Perlで他サイトの情報を取得し...
-
die関数のエラー出力先について
-
ハッシュにファイルハンドル
-
サブスクリプトとのファイルハ...
-
テキストファイルの本文中に行...
-
perlで大容量CSVのsort方法につ...
-
フォルダが開かなくなりました。
-
AutoCADのスクリプト
-
ジョブショップスケジューリング
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
おすすめ情報