【Perl】初心者コーナー Part17

このエントリーをはてなブックマークに追加
952nobodyさん:02/11/19 02:21 ID:???
(;´Д`)アァ・・
953nobodyさん:02/11/19 04:52 ID:???
if(!("もうだめぽ" eq "")){print "ほんとにだめじゃん";}
unless("もうだめぽ" eq ""){print "ほんとにだめじゃん";}
954933:02/11/19 08:32 ID:???
>>950
>>if(-d !"存在するディレクトリ"){〜〜〜}
>これがOK? マジで?
ごみん、嘘言った。
955nobodyさん:02/11/19 11:39 ID:???
このスレは駄目だ。ム板に帰るとしよう。
956nobodyさん:02/11/19 15:11 ID:???
>>955
この野郎、捨てぜりふは余計だ。とっとと消えろ!!
二度と来るな!!!!
957てすと:02/11/19 18:00 ID:a4uQLCBL
簡単な質問ですみません…
外部Webサーバーのデータを読込みたいのですが、

$data = "http://......txt"

ではもちろんダメですよね…
どうすれば取得する事がでるんでしょうか?
もしわかる方がおりましたらお願いしますm(_ _;)m
958nobodyさん:02/11/19 18:02 ID:???
>>957
ソケット使わなきゃ、そりゃ無理だろ。
959nobodyさん:02/11/19 18:37 ID:???
>>957
wgetインストールすればよい
960nobodyさん:02/11/19 20:45 ID:???
961nobodyさん:02/11/19 22:11 ID:???
>>958-959
しかも>>957は ; を忘れている
962nobodyさん:02/11/19 23:17 ID:???
あらあらまぁまぁ
963nobodyさん:02/11/19 23:20 ID:7H8zCiDS
こんにちは
ショッピングカートで注文確認メールを出しているのですが、
違う注文確認メールが届きました。
たとえば注文番号100番の人に100番の確認メールが届き(正常)
数時間後その人に98番の確認メールも届いた(異常)ってことなんです。

注文の終了時に行われるスクリプトの概要は

ユーザーがフォームに入力したメールアドレスを取得(cgi-lib.pl)
自分宛に注文メール送信
ユーザー宛に注文確認メール送信
ログに注文データ保存
送信しましたメッセージ表示
exit;

という具合なのですが、このプロセスで前の注文データが流れるって事は
あり得るのでしょうか?

ちなみにメール送信はそのままsendmailに渡しています。

よろしくお願いいたします。



964nobodyさん:02/11/20 00:20 ID:???
>>963
ログとってないの?
965963:02/11/20 00:56 ID:???
ログ取ってありますが、異常なしです。
注文通りのデータのならびで前後したりはしてません。
1年以上同じ方法で今回初めてなりました。


966nobodyさん:02/11/20 11:54 ID:???
ラウンジみたいにみんながどっと書き込んで誰が*99取るか
分からないという状況でないと面白くも何ともない
967nobodyさん:02/11/20 12:22 ID:???
勇気を出して、アゲぽ
968nobodyさん:02/11/20 15:41 ID:???
質問です。

open OUT, "hoge.txt";
print OUT "$hogehoge";
print "$hogehoge";
close OUT;

という何の変哲もない文が、設置場所によっては「画面に出力できるのに
ファイルに出力できない」という事態に悩まされています。このような状況が
発生するのは、この文が実行位置の後ろの方にあるときです。全く同じ物を
実行位置の先頭の方に置くと画面にもファイルにも出力できます。

この問題の対処法を教えて下さい。
969nobodyさん:02/11/20 15:45 ID:???
>>968
読み込み専用で開いてよくファイルに出力できるね。
Content-type の位置じゃないの?
後ろの方とか言われても第三者にはさっぱりですが。
970nobodyさん:02/11/20 16:00 ID:???
>969
失敗、つまらんミスしてた…

open OUT,">>hoge.txt";

と読み替えて下さい。
で、「後ろの方」ってのは「1つのファイルを読み込んで、あれこれ操作をして、
最後に書き出す」という処理の後ろ、つまり最後の「書き出す」部分です。
これを「あれこれ操作をする」前に置くときちんと動作するのです。

あと、これはローカル環境で起きている問題なので、Content-typeは
たぶん関係ないと思います。

971nobodyさん:02/11/20 16:08 ID:???
ファイルポインタかな。
seek FP, 0, 0;
で先頭に戻さないと。
972nobodyさん:02/11/20 16:11 ID:???
>>968
その部分だけではなんとも言えんよ
973nobodyさん:02/11/20 16:24 ID:???
>971
ファイルポインタを先頭に戻すと追記の意味がなくなってしまうんじゃないでしょうか…
と思いつつ試してみましたが、無理でした。

>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に入れると動作しません(画面には出力される)。
これでご理解頂けますか?
974nobodyさん:02/11/20 16:32 ID:???
$hogehoge は ドコ(゚Д゚≡゚Д゚)ドコ
975nobodyさん:02/11/20 16:38 ID:???
>974
「ちゃんと意味のある変数」として読み変えていただければ。
わかりにくければ$line[0]とでも。実際に$hogehogeを$line[0]に
変えても症状は変わりませんし。
976nobodyさん:02/11/20 16:45 ID:???
「処理あれこれ」で$hogehogeだか$line[0]だかが消されている。
「画面には出力される」てのは、foreachの中でprintかなんか
入れちゃってる。

に1票
977nobodyさん:02/11/20 16:52 ID:???
2の後で print $hogehoge するとどうなるの?
978nobodyさん:02/11/20 16:57 ID:???
とりあえず処理あれこれが原因なのでよーく検証してみれ

関係ないけど、
@line = <FILE>;
foreach(@line){ 〜 }

while (<FILE>) { 〜 }
の方がよさげ。
979nobodyさん:02/11/20 17:01 ID:???
>976
画面への出力に使うprintは問題の文中にしかありません。心配になって、
問題の文の前後にprint "---\n";をつけて確かめたから確実です。

>977
(前略)
close OUT;
print $hogehoge;
ということでしょうか。正常に$hogehogeの内容が出力されますし、
closeの前にあったprint "$hogehoge";と同じ結果になります。
980nobodyさん:02/11/20 17:03 ID:???
>978
自分でも調べているのですが、なかなか…
foreachはwhileに変えておきます。有り難うございました。
981nobodyさん:02/11/20 17:06 ID:???
$hogehogeをどこでどう定義してるか。
foreachの中で$hogehogeに手を加えてるのかどうか。
人に物を聞くならこのくらい書け。
982nobodyさん:02/11/20 17:35 ID:???
>981
これは失礼。しかしながら、最初に読み込んだきり何も手を付けていない
$line[0]を$hogehogeと置き換えても同じ現象が発生しているため、定義云々は
関係ないと思います。
983nobodyさん:02/11/20 17:43 ID:???
>>982
$line[0]って何だかしってんのか。
yomikomi.txtの1行目だぞ。おまえはそれを処理して
hoge.txtに書き込もうとしてるって書いてるよな。
なぜ、「読み込んだきり何も手を付けていない」なんて
いえるんだよ。
984nobodyさん:02/11/20 17:48 ID:???
それとなー、
>>980
>foreachはwhileに変えておきます。
こんなこと言ってるから、相当なとんまかと思われる。
985nobodyさん:02/11/20 17:49 ID:???
>983
特定の文字列が出るまでは何もしないで次の行に移るようになっています。
そして1行目には絶対その文字列が出てきません。従って、$line[0]には
手を加えることはありません。
986nobodyさん:02/11/20 17:50 ID:???
スクリプト全部晒したら?
987nobodyさん:02/11/20 18:29 ID:???
openに失敗してるとか。

open OUT, ">> hoge.txt" or die $!;
これでどうなる?
988nobodyさん:02/11/20 21:38 ID:???
遅くなって申し訳ありません。いろいろ試そうと思ったのですが、
ソースがスパゲッティになってたので、いくつかのサブルーチンを
別ファイルに移し、requireで呼べるようにしたんですが…

そしたら何故か解決しました。何で?(´Д`;

>986
700行あるので…守秘義務ってのもありますし(うるさいんですよ…)。

>987
試してみたところ、>973の#1では問題なくopenしていて、ファイルが
生成されてちゃんと書き込みも出来ているのですが、#2では
「No such file or directory …」と言われました(でも#1でファイルは
出来てます)。
989nobodyさん:02/11/20 21:43 ID:???
書き損ねです。

×ソースがスパゲッティになってたので、いくつかの…
○ソースがスパゲッティになってたので、多少なりとも見やすくするためにいくつかの…

で、「No such file or directory…」と言われたのは
サブルーチンを別ファイルに移す前の話です。
原因はわかりませんでしたが、とりあえず解決出来ました。
ご協力ありがとうございました。
990nobodyさん:02/11/20 21:46 ID:???
ぶっきらぼうな日本語でもいいですから、
946を和訳してください。

せっかく書いていただいたのに、
実行してもなーんにも起こらず、
修正しようとも意味が判らず
さっぱりです。

とてーも困っています。

991nobodyさん:02/11/20 21:50 ID:2IcSyXEF
外部データファイルを読み込む時は、
open IN,"datafile.dat";
while(<IN>){ 〜〜中略〜〜}
close IN;
これで読み込めますよね。

これと同じ要領で、ファイルではなくWEBページを読み込みたいのですが可能でしょうか?
例えば、yahooのトップページのソースを読み込んでdataファイルに出力する・・
といった類いのことがしたいのです。

ヒントだけでも構いませんのでよろしくお願いします。
992nobodyさん:02/11/20 21:55 ID:???
perl -F, -ane 'print @F[2];' kyoto.csv
とすると表示されますが、
perl -F, -ane 'print @F[4];' kyoto.html.csv
……
perl -F, -ane 'print @F[10];' kyoto.html.csv
は表示されません。perlってコマンドラインの●を認識するのでしょうか?
993nobodyさん:02/11/20 21:57 ID:???
1000!
994nobodyさん:02/11/20 21:57 ID:???
1000
995nobodyさん:02/11/20 21:58 ID:???

996nobodyさん:02/11/20 21:59 ID:???
1000kamone
997nobodyさん:02/11/20 21:58 ID:???
1000です
998nobodyさん:02/11/20 22:00 ID:???
999nobodyさん:02/11/20 21:59 ID:???
ん?
1000nobodyさん:02/11/20 22:00 ID:2IcSyXEF
1000だよ。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。