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

CGI Perl打印邮件不打印foreach循环,perl,cgi,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脚本并收到电子邮件时。这一行被省略了!有什么好处?为什么我没有得到结果?我怎样才能修好它 提前感谢您有: print MAIL do { expression } …其中表达式不返回任何有用的

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

     print MAIL do{foreach my $m (@more){ print"URL: $m\n";}};
从中提取的阵列是 @more=qw(google.com bob.com frank.com)

当我运行sendmail cgi脚本并收到电子邮件时。这一行被省略了!有什么好处?为什么我没有得到结果?我怎样才能修好它

提前感谢

您有:

print MAIL do { expression }
…其中表达式不返回任何有用的内容,以便
do
打印到邮件文件句柄


你还有:

foreach my $m (@more){
    print "URL: $m\n";
}
…不打印到邮件文件句柄的位置


扔掉
do
,因为它毫无意义。将URL打印到要打印的位置

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

也可以考虑在系统中使用一个(也许不是)管道材料到SeNemail二进制文件中。

:你有:

print MAIL do { expression }
…其中表达式不返回任何有用的内容,以便
do
打印到邮件文件句柄


你还有:

foreach my $m (@more){
    print "URL: $m\n";
}
…不打印到邮件文件句柄的位置


摆脱
do
,因为它毫无意义。将URL打印到您想要打印它的地方

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

也可以考虑在系统中使用一个(而不是(大概)”管道材料到SeNemail二进制文件中。

你的行:

print"URL: $m\n"
将URL打印到
STDOUT
,而不是
MAIL
filehandle。将该行嵌入
foreach
do
中根本不会改变这一点。打印到
MAIL
filehandle的只是
foreach
循环的返回值。这(如您所见)不返回任何内容

我认为您希望将所有这些代码替换为:

print MAIL "URL: $_\n" for @more;

您的线路:

print"URL: $m\n"
将URL打印到
STDOUT
,而不是
MAIL
filehandle。将该行嵌入
foreach
do
中根本不会改变这一点。打印到
MAIL
filehandle的只是
foreach
循环的返回值。这(如您所见)不返回任何内容

我认为您希望将所有这些代码替换为:

print MAIL "URL: $_\n" for @more;


哼哼。在打印邮件中添加foreach会引发错误,因为它不喜欢它。打印邮件“URL:$URL\n”;foreach my$m(@more){print mail“URL:$m\n”;}};打印邮件“到期日期:$Date\n”;@user1937895-我没有说你应该把它放在打印中。用这个答案第三个代码块中的代码替换问题中的所有代码。你能举个例子说明你的意思吗?不清楚。谢谢。在打印邮件中添加foreach会出错,因为它不喜欢它。打印邮件“URL:$URL\n”;foreach my$m(@more){print MAIL“URL:$m\n”;}};print MAIL“到期日:$Date\n”;@user1937895-我没有说你应该把它放在印刷品中。用这个答案第三个代码块中的代码替换问题中的所有代码。你能举一个例子说明你的意思吗?不清楚。感谢事实,这是CGI在这里完全是一个骗局。程序员可以拥有的最有用的技能之一是a测试消除对手头问题没有影响的因素的场景的能力。事实上,这是CGI在这里完全是一个骗局。程序员可以拥有的最有用的技能之一是测试消除对手头问题没有影响的因素的场景的能力。@user1937895:这真的没什么不同根据昆汀的回答。如果你输入正确,那也行。@user1937895:另外,我希望你花点时间来理解为什么这些解决方案有效,而你的原始代码无效。仅仅从堆栈溢出中剪切和粘贴代码并不能建立一个程序员的职业生涯。谢谢你的建议。我对你的解决方案比以前的解决方案更了解哦,还有,同意剪切和粘贴这不是工作方式。:)@user1937895:这与Quentin的答案没有什么不同。如果你输入正确,那也行。@user1937895:另外,我希望你花点时间来理解为什么这些解决方案有效,而你的原始代码无效。仅仅从堆栈溢出中剪切和粘贴代码并不能培养程序员的职业生涯。谢谢你的建议。我也理解d您的解决方案比下面的解决方案更好。并且,同意剪切和粘贴这不是工作方式。:)