- ベストアンサー
foreachでのメール一斉送信処理がうまくいきません
以下のようなファイルからデータを読み込みメールを送信させたいのですが、一つ目のデータに対してはメール送信が行われますが、2行目以降に対してメール送信が行われません。 下記のuser.txt例ですと1行目のAさん宛てには送信されますが,2行目のBさんにはメール送信がされません。 どうしてなのでしょうか? ユーザーに応じたメッセージを送信する必要があり、BCC送信は利用できません。 #user.txtの内容----------- #Aさん,a@mail.com,0 #Bさん,b@mail.com,0 #------------------------ #読み込んだファイルから一行づつ各項目データを読み込む #@checkにはuser.txtが入っている。 foreach $item (@check){ @check_array = split(/\,/, $item); #1件づつメールを送信する require "./mails_user.pl"; } #外部 mails_user.plの内容----------- open (MAIL, "|$mailprog -t") or &Make_Error('mail_trouble'); print MAIL "To: $check_array[1]\n"; print MAIL "From: 送信元アドレス\n"; print MAIL "Subject: タイトル\n\n"; print MAIL "$check_array[0]へのメッセージ"; close(MAIL); 1; #-----------------------------------
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
require では 2度目の読み込むことは 出来ないようですが 読み込んだことを忘れさせれば、再度、読み込みが可能になります delete $INC{'mails_user.pl'}; require "./mails_user.pl";
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
疑問形でかかれていましたので僭越ながら補足します。 > 実は「require は最初に実行されるときにしか読み込まない」とか, そういうオチはないかなぁ? そのとおりです。 "require" demands that a library file be included if it hasn't already been included. とありますので、同じファイルを二度以上 取り込むことはありません。
お礼
ありがとうございます。 その通りでした。
- Tacosan
- ベストアンサー率23% (3656/15482)
そんなところで require するというのが, 個人的に理解できないんだけど.... 実は「require は最初に実行されるときにしか読み込まない」とか, そういうオチはないかなぁ?
お礼
ありがとうございます。全くその通りででした。 以前似たようなソースを書いたのは動いていたのになぁと思いつつ、 以前のソースと違うのがrequireさせた点でした。
お礼
ありがとうございます。