(我已经发布到另一个网站,并将使用解决方案进行更新,但到目前为止仍在努力解答)
2013年12月19日下午7:06 PT ---我找到了解决方案,我在下面进行了更新。
我每行输出两项数据。第一列数据不是固定长度,我希望每次第二项数据在同一位置正确对齐,所以我使用sprintf格式化数据然后邮寄出数据
print命令输出说明数据格式正确。
然而,当我的电子邮件中的输出不同时,对齐完全错误。
我最初认为它是邮件程序(MIME :: Lite),但我不确定。
我之所以认为这是因为我使用eclipse Perl环境,当我查看调试变量列表时,我看到字符串的填充方式与我的电子邮件中的输出完全相同,但print语句显示数据正确对齐!!!
请帮助我了解这里发生了什么以及如何解决它。
use MIME::Lite;
$smtp = "mailserver";
$internal_email_address = 'myemailaddess';
$a = sprintf ("%-60s %-s\n", "the amount for Apple is ","34");
$b = sprintf ("%-60s %-s\n", "the amount for Lemons is", "7");
print $a;
print $b;
$c = $a.$b;
mailer( $internal_email_address,"issue", $c);
sub mailer {
my ( $addr, $subj, $output ) = @_;
print "$_\n" for $addr;
print "$_\n" for $subj;
print "$_\n" for $output;
$msg = MIME::Lite->new(
From => 'xxxx',
To => $addr,
Subject => $subj,
Data => $output
);
MIME::Lite->send( 'smtp', $smtp, Timeout => 60 );
eval { $msg->send };
$mailerror = "Status: ERROR email - MIME::Lite->send failed: $@\n" if $@;
if ( $mailerror eq '' ) {
$status = "Status: Mail sent\n";
}
else {
$status = $mailerror;
}
}
答案 0 :(得分:1)
$a = sprintf ("%-10s %-s\n", "the amount for Apple is ","34");
参数"the amount for Apple is"
对于格式说明符%-10s
来说太长了,因此用于该参数的实际空间量将是字符串的长度。
您可以使用具有较大值的格式说明符(例如%-25s
),以适应您可能适用的任何值。
或者,如果您希望sprintf
以10个字符截断参数,请使用格式说明符%-10.10s
。