【Perl】初心者コーナー Part17
レス数が1000を超えています。これ以上書き込みはできません。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0960nobodyさん
02/11/19 20:45ID:???相互リンク・・・・
0962nobodyさん
02/11/19 23:17ID:???0963nobodyさん
02/11/19 23:20ID:7H8zCiDSショッピングカートで注文確認メールを出しているのですが、
違う注文確認メールが届きました。
たとえば注文番号100番の人に100番の確認メールが届き(正常)
数時間後その人に98番の確認メールも届いた(異常)ってことなんです。
注文の終了時に行われるスクリプトの概要は
ユーザーがフォームに入力したメールアドレスを取得(cgi-lib.pl)
自分宛に注文メール送信
ユーザー宛に注文確認メール送信
ログに注文データ保存
送信しましたメッセージ表示
exit;
という具合なのですが、このプロセスで前の注文データが流れるって事は
あり得るのでしょうか?
ちなみにメール送信はそのままsendmailに渡しています。
よろしくお願いいたします。
0965963
02/11/20 00:56ID:???注文通りのデータのならびで前後したりはしてません。
1年以上同じ方法で今回初めてなりました。
0966nobodyさん
02/11/20 11:54ID:???分からないという状況でないと面白くも何ともない
0967nobodyさん
02/11/20 12:22ID:???0968nobodyさん
02/11/20 15:41ID:???open OUT, "hoge.txt";
print OUT "$hogehoge";
print "$hogehoge";
close OUT;
という何の変哲もない文が、設置場所によっては「画面に出力できるのに
ファイルに出力できない」という事態に悩まされています。このような状況が
発生するのは、この文が実行位置の後ろの方にあるときです。全く同じ物を
実行位置の先頭の方に置くと画面にもファイルにも出力できます。
この問題の対処法を教えて下さい。
0969nobodyさん
02/11/20 15:45ID:???読み込み専用で開いてよくファイルに出力できるね。
Content-type の位置じゃないの?
後ろの方とか言われても第三者にはさっぱりですが。
0970nobodyさん
02/11/20 16:00ID:???失敗、つまらんミスしてた…
open OUT,">>hoge.txt";
と読み替えて下さい。
で、「後ろの方」ってのは「1つのファイルを読み込んで、あれこれ操作をして、
最後に書き出す」という処理の後ろ、つまり最後の「書き出す」部分です。
これを「あれこれ操作をする」前に置くときちんと動作するのです。
あと、これはローカル環境で起きている問題なので、Content-typeは
たぶん関係ないと思います。
0971nobodyさん
02/11/20 16:08ID:???seek FP, 0, 0;
で先頭に戻さないと。
0973nobodyさん
02/11/20 16:24ID:???ファイルポインタを先頭に戻すと追記の意味がなくなってしまうんじゃないでしょうか…
と思いつつ試してみましたが、無理でした。
>972
それじゃあ、ちょっと長くなりますが。yomikomi.txtを処理して結果をhoge.txtに書き出します。
open FILE, "yomikomi.txt";
@line = <FILE>;
close FILE;
#1
foreach(@line){
処理あれこれ
}
#2
#1の場所に
open OUT, ">>hoge.txt";
print OUT "$hogehoge";
print "$hogehoge";
close OUT;
を入れると正常に動作しますが、#2に入れると動作しません(画面には出力される)。
これでご理解頂けますか?
0974nobodyさん
02/11/20 16:32ID:???0975nobodyさん
02/11/20 16:38ID:???「ちゃんと意味のある変数」として読み変えていただければ。
わかりにくければ$line[0]とでも。実際に$hogehogeを$line[0]に
変えても症状は変わりませんし。
0976nobodyさん
02/11/20 16:45ID:???「画面には出力される」てのは、foreachの中でprintかなんか
入れちゃってる。
に1票
0977nobodyさん
02/11/20 16:52ID:???0978nobodyさん
02/11/20 16:57ID:???関係ないけど、
@line = <FILE>;
foreach(@line){ 〜 }
は
while (<FILE>) { 〜 }
の方がよさげ。
0979nobodyさん
02/11/20 17:01ID:???画面への出力に使うprintは問題の文中にしかありません。心配になって、
問題の文の前後にprint "---\n";をつけて確かめたから確実です。
>977
(前略)
close OUT;
print $hogehoge;
ということでしょうか。正常に$hogehogeの内容が出力されますし、
closeの前にあったprint "$hogehoge";と同じ結果になります。
0980nobodyさん
02/11/20 17:03ID:???自分でも調べているのですが、なかなか…
foreachはwhileに変えておきます。有り難うございました。
0981nobodyさん
02/11/20 17:06ID:???foreachの中で$hogehogeに手を加えてるのかどうか。
人に物を聞くならこのくらい書け。
0982nobodyさん
02/11/20 17:35ID:???これは失礼。しかしながら、最初に読み込んだきり何も手を付けていない
$line[0]を$hogehogeと置き換えても同じ現象が発生しているため、定義云々は
関係ないと思います。
0983nobodyさん
02/11/20 17:43ID:???$line[0]って何だかしってんのか。
yomikomi.txtの1行目だぞ。おまえはそれを処理して
hoge.txtに書き込もうとしてるって書いてるよな。
なぜ、「読み込んだきり何も手を付けていない」なんて
いえるんだよ。
0985nobodyさん
02/11/20 17:49ID:???特定の文字列が出るまでは何もしないで次の行に移るようになっています。
そして1行目には絶対その文字列が出てきません。従って、$line[0]には
手を加えることはありません。
0986nobodyさん
02/11/20 17:50ID:???0987nobodyさん
02/11/20 18:29ID:???open OUT, ">> hoge.txt" or die $!;
これでどうなる?
0988nobodyさん
02/11/20 21:38ID:???ソースがスパゲッティになってたので、いくつかのサブルーチンを
別ファイルに移し、requireで呼べるようにしたんですが…
そしたら何故か解決しました。何で?(´Д`;
>986
700行あるので…守秘義務ってのもありますし(うるさいんですよ…)。
>987
試してみたところ、>973の#1では問題なくopenしていて、ファイルが
生成されてちゃんと書き込みも出来ているのですが、#2では
「No such file or directory …」と言われました(でも#1でファイルは
出来てます)。
0989nobodyさん
02/11/20 21:43ID:???×ソースがスパゲッティになってたので、いくつかの…
○ソースがスパゲッティになってたので、多少なりとも見やすくするためにいくつかの…
で、「No such file or directory…」と言われたのは
サブルーチンを別ファイルに移す前の話です。
原因はわかりませんでしたが、とりあえず解決出来ました。
ご協力ありがとうございました。
0990nobodyさん
02/11/20 21:46ID:???946を和訳してください。
せっかく書いていただいたのに、
実行してもなーんにも起こらず、
修正しようとも意味が判らず
さっぱりです。
とてーも困っています。
0991nobodyさん
02/11/20 21:50ID:2IcSyXEFopen IN,"datafile.dat";
while(<IN>){ 〜〜中略〜〜}
close IN;
これで読み込めますよね。
これと同じ要領で、ファイルではなくWEBページを読み込みたいのですが可能でしょうか?
例えば、yahooのトップページのソースを読み込んでdataファイルに出力する・・
といった類いのことがしたいのです。
ヒントだけでも構いませんのでよろしくお願いします。
0992nobodyさん
02/11/20 21:55ID:???とすると表示されますが、
perl -F, -ane 'print @F[4];' kyoto.html.csv
……
perl -F, -ane 'print @F[10];' kyoto.html.csv
は表示されません。perlってコマンドラインの●を認識するのでしょうか?
0993nobodyさん
02/11/20 21:57ID:???0994nobodyさん
02/11/20 21:57ID:???0995nobodyさん
02/11/20 21:58ID:???0996nobodyさん
02/11/20 21:59ID:???0997nobodyさん
02/11/20 21:58ID:???0998nobodyさん
02/11/20 22:00ID:???0999nobodyさん
02/11/20 21:59ID:???1000nobodyさん
02/11/20 22:00ID:2IcSyXEF10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。