• ベストアンサー

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; #-----------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • maura
  • ベストアンサー率46% (48/104)
回答No.3

require では 2度目の読み込むことは 出来ないようですが 読み込んだことを忘れさせれば、再度、読み込みが可能になります delete $INC{'mails_user.pl'}; require "./mails_user.pl";

perlerz10
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

疑問形でかかれていましたので僭越ながら補足します。 > 実は「require は最初に実行されるときにしか読み込まない」とか, そういうオチはないかなぁ? そのとおりです。 "require" demands that a library file be included if it hasn't already been included. とありますので、同じファイルを二度以上 取り込むことはありません。

perlerz10
質問者

お礼

ありがとうございます。 その通りでした。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そんなところで require するというのが, 個人的に理解できないんだけど.... 実は「require は最初に実行されるときにしか読み込まない」とか, そういうオチはないかなぁ?

perlerz10
質問者

お礼

ありがとうございます。全くその通りででした。 以前似たようなソースを書いたのは動いていたのになぁと思いつつ、 以前のソースと違うのがrequireさせた点でした。

関連するQ&A