以下代码能够读取文件内容并使用文件内容打印正文内容。
use strict;
my $filename = '.../text.txt';
open (my $ifh, '<', $filename)
or die "Could not open file '$filename' $!";
local $/ = undef;
my @row = (<$ifh>)[0..9];
close ($ifh);
print "@row\n";
my ($body) = @_;
my ($html_body)= @_;
.
.
.
print(MAIL "Subject: Important Announcement \n");
.
.
.
push(@$html_body, "<h1><b><font color= red ><u>ATTENTION!</u></b></h1></font><br>");
push(@$html_body, "@row");
.
.
.
print(MAIL "$body", "@$html_body");
close(MAIL);
但遗憾的是,我在生成具有相同格式的text.txt文件的电子邮件正文时遇到问题。产生的输出电子邮件只有单行而不是3的段落。
答案 0 :(得分:-1)
首先,@_
是传递给子程序的参数数组,看起来你不在一个。所以,做:
my ($body) = @_;
my ($html_body) = @_;
正在设置$body
&amp; $html_body
至$_[0]
,undef
。
如何解决?
如果将它包装在子例程中,有两种方法:
使用shift
- &gt;这将使上面的代码看起来像:
my ($body) = shift;
my ($html_body)= shift;
或者,
my ($body, $html_body) = @_;
我会推荐最后一个,因为它代码少,比第一个更易读。
答案 1 :(得分:-1)
您遇到的问题是,当放置在HTML文档中时,纯文本不包含格式信息。行尾字符被忽略并被视为普通的空格。您需要在文本中添加HTML标签以传达您想要的格式,或者您可以将其包装在预标签中,因为它会显示它&#34;原样&#34;。
正如其他人在上述评论中所提到的,您对@_
的使用并不合理。将$html_body
视为一个数组,当你所做的只是将HTML附加到它时,它真的没有意义。因此,我重写了那段代码,将其用作标量并将HTML附加到其中。并修复了HTML中的一些错误,因为您需要按照打开它们的顺序关闭标记。
print MAIL "Subject: Important Announcement \n";
print MAIL "\n"; # Need a blank line after the header to show it's finished
my $html_body = "<html><body>";
$html_body .= "<h1><b><font color="red"><u>ATTENTION!</u></font></b></h1>";
$html_body .= "<pre>";
$html_body .= join("", @row);
$html_body .= "</pre>";
$html_body .= "</body></html>";
print MAIL $html_body;
close(MAIL);