CGI Perl打印邮件不打印foreach循环

时间:2017-09-27 12:47:42

标签: perl cgi

我在大型CGI perl邮件程序中有以下代码。

     print MAIL do{foreach my $m (@more){ print"URL: $m\n";}};

它拉出的阵列是             @more = qw(google.com bob.com frank.com);

当我运行sendmail cgi脚本并收到电子邮件时。这行被省略了!是什么赋予了?为什么我没有得到结果?我该如何解决?

先谢谢

2 个答案:

答案 0 :(得分:2)

你有:

print MAIL do { expression }

...表达式没有返回任何对do打印到MAIL文件句柄有用的内容。

您还有:

foreach my $m (@more){
    print "URL: $m\n";
}

...您没有打印到MAIL文件句柄。

摆脱do,因为这是无稽之谈。将URL打印到要打印的位置。

foreach my $m (@more){
    print MAIL "URL: $m\n";
}

另外,请考虑直接在系统上的sendmail二进制文件中使用sensible module for sending email(可能Email::Sender::Simple代替(大概)管道内容。

答案 1 :(得分:2)

你的专栏:

print"URL: $m\n"

将网址打印到STDOUT,而不打印到MAIL文件句柄。将该行嵌入foreach do内的MAIL根本不会改变这一行。打印到foreach文件句柄的所有内容都是print MAIL "URL: $_\n" for @more; 循环的返回值。那(如你所见)并没有任何回报。

我认为你想用以下代码替换所有代码:

print MAIL map { "URL: $_\n" } @more;

或者

SELECT cus_lname,
       cus_fname,
       cus_email,
       orders.order_id,
       order_status,
       ((COUNT(ol_quantity)) * prod_price) AS total_price
FROM customer
     INNER JOIN orders ON customer.cus_id = orders.cus_id
     INNER JOIN orderline ON orders.order_id = orderline.order_id
     INNER JOIN product ON orderline.prod_id = product.prod_id
GROUP BY cus_lname,
         cus_fname,
         cus_email,
         orders.order_id,
         order_status;