我在大型CGI perl邮件程序中有以下代码。
print MAIL do{foreach my $m (@more){ print"URL: $m\n";}};
它拉出的阵列是 @more = qw(google.com bob.com frank.com);
当我运行sendmail cgi脚本并收到电子邮件时。这行被省略了!是什么赋予了?为什么我没有得到结果?我该如何解决?
先谢谢
答案 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;