• 締切済み

意味を教えてください

初心者なのですが、sendmailのプログラムを勉強していて、意味がどーしても分からないので教えて下さい。 #メール本文 my $mailbody = "以下の通りメールフォームより送信がありました。\n\n"; $mailbody .= "送信日時 = $now\n"; foreach my $i (0..$#key){ #modeはスキップ if($key[$i] eq "mode"){next;} #改行変換(タブ→\n) $val[$i] =~s/\t/\n/g; #メール本文 $mailbody .= "$key[$i] = $val[$i]\n"; } で、 (1)$mailbody .=の.=って何ですか?何で=の前に.が付いているのですか? (2)(0..$#key){ の所、$#key なぜ$の次にコメントの始まりである#が付いているのでしょうか? 自分なりに調べたのですが、どーしても分からなくてどなた様かお教え願えないでしょうか。よろしくお願い申し上げます。

  • u2122
  • お礼率71% (125/176)
  • Perl
  • 回答数2
  • ありがとう数2

みんなの回答

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

$# は意味ありますよ?. 対応する配列の「最後の添字」だったかな? つまり, $#key なら「配列 @key の最後の添字」だったような気がする.

u2122
質問者

お礼

わざわざご指摘下さり、本当にありがとうございました!!「配列 @key の最後の添字」 でググッタら出てきました。なるほど、大変参考になりました。大感謝です。

  • gwagaw
  • ベストアンサー率18% (11/59)
回答No.1

perlを触ったことないオイラでもちょろっと検索したら分かるのに自分なりに調べたとは思えませんが。 (1)$mailbody .=の.=って何ですか?何で=の前に.が付いているのですか? 文字列を追加して代入する演算子でしょう。 「.」がないと$mailbodyには「送信日時 = $now\n」しか代入されません。 (2)(0..$#key){ の所、$#key なぜ$の次にコメントの始まりである#が付いているのでしょうか? きっとこれサンプルコードじゃないですか?見る人にわかりやすいように付いてるだけです。

u2122
質問者

お礼

(1)代入演算子でググッたらのってました。自分の見落としでした。 (2)は特に意味はないんですね。ありがとうございました。

関連するQ&A

  • PHP 自動返信メールについて

    日本語対応で自動返信メールを送るときは下記の通りPHPを組んでいます。 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* if(isset($_POST[$dsp_name])){ $rebody = h($_POST[$dsp_name]). " 様\n";} $rebody.= $remail_text; $rebody.="\n===========================\n\n"; foreach($_POST as $key=>$val) { $out = ''; if(is_array($val)){ foreach($val as $item){ $out .= $item . ', '; } $out = rtrim($out,', '); }else { $out = $val; } if(get_magic_quotes_gpc()) { $out = stripslashes($out); } if($out != "confirm_submit" && $key != "httpReferer"){ $rebody.="【 ".$key." 】 ".$out."\n"; } } $rebody.="\n===========================\n\n"; $rebody.="送信日時:".date( "Y/m/d (D) H:i:s", time() )."\n"; *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 上記PHPの場合、自動返信メールの本文は『○○ ○○様』といった内容になるのですが。 これを英語対応で、自動返信メールの本文は『Dear. ○○○○』といった内容に変更したいのですがPHPコードはどのように編集すればいいでしょうか? どなたか分かる方がいれば教えて下さい。 ちなみにPHPコードは“PHP工房様【http://www.php-factory.net/】”の多機能メールフォーム フリーを使用しています。 つたない説明かとは思いますが、どなたかお力をお貸し頂ければと思います。

  • HTMLのメールフォームよりメールを送る際、本文に文章を追加したい

    お世話になっております。 ご存知の方いらっしゃいましたら、ご教授願えますでしょうか? 現在、会社の採用応募のためのメールフォームを作成しています。 メールは通常通り送信されているので、問題はないのですが、 フォームの内容がメールで担当者に送られてきた際、 フォームの内容だけでは分かりづらいので、 メール本文(フォームの内容の前に)に以下のような内容を追加したいと思っています。 ※追加したいところには※マークがついています。 <追加内容> ※以下の内容で応募がありました。 ※--------------------------------------- ※《応募内容》 ・ ・ (フォームの登録内容) ・ ・ ※--------------------------------------- メールボディを作成する部分があるので、こちらに試しに以下のように記述してみたのですが、 「------------------」の行のみメールが送られてきました。 <CGIのコード> { $mailbody = "以下の内容の応募が応募フォームよりありました。\n"; $mailbody = "-------------------------------------------\n"; $mailbody = "《応募内容》\n"; for ($i = 0; $i < $cnt; $i++) { $mailbody .= "$FORM[$i] = $FORM{$FORM[$i]}\n"; } $mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g; $mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g; $mailbody = "-------------------------------------------\n"; } ちなみに最後の 「$mailbody = "-------------------------------------------\n";」を 消してみたところ「《応募内容》~フォームの入力内容~」 のような形で送られてきたのですが・・・。 メール本文に複数行文章を追加したい場合はどうしたらよいのでしょうか? お手数ですが宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • foreachで=>はどういう意味ですか?

    foreach ($val as $v=>$key)の=>はどのような意味なのでしょうか? google検索では=>が記号のため検索できません。 使い方と機能を教えて下さい。 どうぞよろしくお願い致します。

    • 締切済み
    • PHP
  • foreachとかの勝手な省略?

    PHP初心者です。 foreachを使うときに、参考サイトのソースを見て???だったのですが、 例えば以下の場合に foreach($_POST['hoge'] as $key => $val){ echo "$key : $val \n"; } とありますが、hogeは自分で決めたものなので分かるのですが、 見に覚えの無い$key => $valといった変数で動作しています。 $keyや$valは自分で定義した覚えはありません。 調べると$keyは分かりませんが、$valはvalueの省略みたいな記述がありました。 また、他には更に短縮され、$kとか$vしか記述されていないソースもあり、 試すとこれでも正常に動いています。 これはどういうことなのでしょうか? 何か決まりがあるのでしょうか。 ちなみに、チェックボックスの配列取得の定義に使いました。 私からはただ勝手に短縮しているようにしか見えず納得いきません。 お詳しい方、どなたかアドバイス頂けないでしょうか。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • foreachの中で、リンクをPOST送信したい

    ・PHPのforeachで一覧表示しているリンクテキストをクリックして、POST送信したいです ・この時、foreachの$val['url']内容に応じて、action送信先を変更したいのですが、どうすれば良いでしょうか? ■完成イメージ <?php foreach ($key as $val): ?> <form name="test"> <a href="#" onClick="hoge($val['url'])"> </form> ・1行目内容 … 送信先 $val['url'] ・2行目内容 … 送信先 $val['url'] ・3行目内容 … 送信先 $val['url'] ■分からないこと ・foreachで回した後にクリックすることになると思うので、現状だとaction送信先は、全てループ一番最後の$val内容固定になってしまいます(多分…) ・リンクテキストのPOST送信先を、foreach内容に応じて変えるにはどうすれば良いでしょうか? ※foreach内容に応じて、リンクテキストがPOST送信できるのであれば、やり方は何でも良いです

  • PerlでのCSV書き込みについて質問です。

    perl初心者です。 perlで投票のプログラミングを作ってるのですが、 どうもうまく動きません。 やりたいことは ・投票されたら  1)csvを読み込む  2)該当するNOのカウントをアップ  3)csvに書き込む という単純なことなのですが、 投票してもカウンタは0のままになってしまいます。 書き込み部分のプログラムが間違っているとは思うのですが 何が間違っているのかがどうしてもわかりません。 どなたかお知恵を貸してくださいm(__)m プログラムは下記のようになっています。 ================= foreach my $key (@key) { $val = $in{$key}; $in{$key} = &Jcode::convert(\$val, 'sjis'); } # データオープン open(DAT,"+< $datfile"); flock(DAT, 2); my @data; while (<DAT>) { push(@data,$_); if (eof) { last; } } # データ書き込み truncate(DAT, 0); seek(DAT, 0, 0); my $i=1 while (i<11){ my ($no,$name,$count) = split(/,/, $data[$i]); if($val eq $no){$count++;} if (eof) { last; } $i++; print DAT "$no,$name,$count,\n"; } close(DAT); ================= どうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • エラーが出ます。どこが間違っているのでしょうか??

    以下のスクリプトについて質問があります。フォームから入ってきた値を%prof1に入れ、そのうち$prof1{mail}の値に入っていたアドレスに向けて「http」という文章をメールで送るスクリプトのはずなのですが、ロリポップに上げて試行してみたところエラーが出ました。自ウェブサーバで確認したところ、($key, $val) = split(/=/); の行でエラーが出たのですが、どこが間違っているのかさっぱりわかりません。どこをどう直せばうまく動くのでしょうか??分かる方いらっしゃったらよろしくお願いします。なお、後ろの方のPrint~というのはサブルーチンです。 #!/usr/bin/perl $PATH_SENDMAIL = '/usr/lib/sendmail'; read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); # クエリデータを要素ごとに分解し、@queryの配列に入れる local(@query) = split(/&/, $query); # @queryのnameとvalueを、%prof1のハッシュに入れる foreach (@query) { # name=valueを分け、それぞれ$key、$valに代入     ($key, $val) = split(/=/);     # name=valueを、%prof1のハッシュにセット $prof1{$key} = $val; } #---------------------------------- # 指定メールアドレスにメールを送る #---------------------------------- $mail = $prof1{"mail"}; #---------------------------------- open(MAIL, "| $PATH_SENDMAIL -t -f'$mail'") or PrintError('サーバートラブルでメールの送信ができませんでした。'); print MAIL<< "____END_OF_MAIL"; From: noname To: $mail Subject: notitle ------ http ____END_OF_MAIL close(MAIL); #---------------------------------- PrintHeader('メール送信完了'); print "メールを送信しました。"; PrintFooter(); #----------------------------------

    • ベストアンサー
    • Perl
  • sysopenを使用したメール送信の方法について

    perlでメールフォームを作成しています。 メールの送信にはsendmail をopen関数で使用していたのですが openはセキュリティ上の問題があることを知り、対策を調べているうちに sysopenを使用することが有効だという情報にたどり着きました。 しかし、単純にopenをsysopenに書き換え、オープンモードも設定したのですが sysopenに失敗してしまいます。 sendmail以外のテキストファイルのオープンには成功しているので sysopenの使用方法が間違っている sysopenを使用したsendmailの実行方法を教えていただけませんでしょうか? [ソース] use Fcntl; … $sendmail = '/usr/xxx/sendmail -t -io'; … sysopen(MAIL,"$sendmail ", O_WRONLY ) or die "error!!" my $mailstr = &MAILHEADER($to,$subject); my $mailbody = &MAILBODY($fileId); $mailstr .= $mailbody; print MAIL $mailstr; close MAIL; &MAILHEADER()   →To,From,Subjectの設定 &MAILBODY()   →メール本文の設定 ・sysopen部分は今まで以下の記述で、メールの送信をしていました。   open(MAIL,"| $sendmail") or die "error!!"  ・念のため、-fで「/usr/xxx/sendmail」の存在チェックをおこない、   存在していることを確認しました。  ・sysopenの使用方法が間違っているのかと思い、以下のサンプルを作成してみましたが   問題なく動きました。 my $file = 'test1.txt'; sysopen(MSG,$file, O_WRONLY|O_CREAT|O_APPEND ) or die "sysopen error!!" print MSG "sysopen OK"; close MSG; サンプルが動いたことで、ますますsendmailをオープンできないことに 行き詰ってしまいました。 どうぞよろしくお願いいたします。 質問内容でわかららない部分があればご指摘ください。 可能な限りソースも載せます。

    • ベストアンサー
    • Perl
  • functionとforeachでメール送信

    こんにちは。前にも質問をさせて頂いたのですが・・・ HTMLのメールフォームからPOSTでデータを受信してクライアントとユーザーの両方にメールを送るようなプロゴラムを記述しています。 データの受け取りからメールの送信のスクリプトを function message(){ foreach($_POST as $key => $val){ print( $key .":" .$val. "<br>"); }; }; $message= " テスト送信 <br>"; $message.= message(); if(mail("クライアントのメールアドレス" , "テストメール", $message, $head)&& mail(message(34) , "テスト確認メール", $message, $head)){ print("・・・"); }else{ print("ご注文メール送信に失敗しました。<br />\n"); print("再度ご注文フォームより注文して下さい。\n"); print("<a href=\"#\">戻る</a>"); }; としています。message(34)はユーザーのアドレスを取得しています。 しかし実行すると画面にPOSTで取ってるデータが2回表示され肝心のメールは クライアントには " テスト送信 と本文に表示されてユーザーにはメールが届きません。 質問が2つですみませんが、 1、functionで関数を作りforeachでデータを取得しメールで送信するというやり方は無謀なのでしょうか? もしできるのでしたらやり方を教えて頂けないでしょうか? 2、メールの本文にある"を消すにはどうしたらいいのでしょうか? かれこれ1週間近く悩んでいるのですが、一向にできそうにありません・・・。皆さんの知恵と知識をお借りできたらなと思います、どうかよろしくお願いします。 他に何かいる情報があれば教えて下さい。分かる範囲で補足していきます。

    • ベストアンサー
    • PHP
  • メールフォームからの受信メールの表示と改行について

    メールフォームで入力していただいた内容を 項目 内容 空行 の繰り返しにしたいのですが、どこを変更すればいいのか分からず困っています。 また[ Date ]などとなっている部分の[]も取ってしまいたいです。 スクリプトのここらへんかな?と思う部分も貼ってみましのたで、どなたかアドバイスいただけるとうれしいです。 [ Date ] 2007/11/10 (Sat) 20:16 [ RemoteHost ] **************************** [ RemoteAddr ] ***** [ HttpUserAgent ] ****************** ************** [ ] 実際にはこの行にメールタイトルが入ってます。 [ お名前 ] test [ 郵便番号 ] test (以下省略) //スクリプト if ($AddArea) { foreach (0..$#area) { my $AreaTurn = $area[$_]{'turn'}; my $AreaName = $area[$_]{'name'}; my $AreaVlue = $in{"area$_"}; $AreaName =~ s/<br>//ig; if ($AreaLine) { $AreaVlue = &SplitMessage($AreaVlue); $AreaVlue =~ s/<br>/\r/ig; } $AddMail[$AreaTurn] = "[ $AreaName ]\n"; $AddMail[$AreaTurn] .= "$AreaVlue\n"; if ($CsvUse) { $AreaVlue =~ s/(\r\n|\r|\n)//g; $AreaName =~ s/<[a-zA-Z][^>]*>//g; $AreaName =~ s/<\/[a-zA-Z][^>]*>//g; $AreaTurn2 = sprintf("%03d",$AreaTurn); $CsvSub{$AreaTurn2} = $AreaName; $CsvBdy{$AreaTurn2} = $AreaVlue; } } } if ($AddAttc) { @attach = (); $c = 0; foreach (0..$#attc) { my $AttcVlue = $in{"attc$_"}; my $AttcName = "$AttcTmp$in{\"attc$_->name\"}"; my $AttcType = $in{"attc$_->type"}; my $AttcTurn = $attc[$_]{'turn'}; my $AttcName2 = $attc[$_]{'name'}; $AttcName = $in{"attc$_\_name"} if $AttcName eq $AttcTmp; $AttcType = $in{"attc$_\_type"} if !$AttcType; if ($AreaLine) { $GetMessage = &SplitMessage($GetMessage) if $GetMessage =~ /<br>/; } if ($GetEmail eq $MailAddr[0]) { $BodyEmail = ""; } else { $BodyEmail = $GetEmail; } $AddMail[$SubNum] = "[ $SubTtl ] \n$GetSubject\n"; $AddMail[$NameNum] = "\n[ $NameColumn ] \n$GetName\n"; if ($KanaFix) { $AddMail[$KanaNum] = "\n[ $KanaColumn ] \n$GetKana\n\n"; } $AddMail[$MailNum] = "\n[ $MailColumn ] \n$BodyEmail\n"; $AddMail[$MessNum] = "\n[ $MessColumn ]\n\n"; $AddMail[$MessNum] .= "$GetMessage\n\n"; $MailBody = "[ Date ] \n$NowTime\n"; $MailBody .= "[ RemoteHost ] \n$RemoteHost\n"; $MailBody .= "[ RemoteAddr ] \n$RemoteAddr\n"; $MailBody .= "[ HttpUserAgent ]\n $UserAgent\n"; foreach (@AddMail) { $MailBody .= $_; } $MailBody .= "\n$ScriptVer\n\n"; if ($HeaderFrom) { $SendFrom = "$GetName <$GetEmail>"; } else { $SendFrom = $GetEmail; }

専門家に質問してみよう