1

我有一个包含设备名称的文件,它是 shell 脚本的输出,具体取决于区域。所以区域是可变的,可以更改....例如 devicelist=device.region

现在我想将此设备列表添加到电子邮件正文中。为了发送电子邮件,我使用 perl 脚本,我尝试了以下方法,但它不起作用......

my $file = "$ENV{devicelist}";
open my $fh, '<', $file;
print while (<$fh>);

I am getting this message as :  GLOB(0x11aeea8)

Perl 脚本....

my $file = "/tmp/devicelist";open my $fh, '<', $file;print while (<$fh>);
$logger->debug("$logid >> Device names is $deviceinfo");


         $smtp->datasend("Customer Name : $custname\n\n");
         $smtp->datasend("Site Location : $sitename\n\n");
         $smtp->datasend("Region : $region\n\n");
         my $file = "/tmp/devicelist";
         open my $fh, '<', $file;
         print while (<$fh>);
         $smtp->datasend("Device Info : $deviceinfo\n\n"); 1st way
         $smtp->datasend("Device Info perl : $fh\n\n"); 2nd way

当有超过 10 台设备停机并且我想显示这 10 台设备名称时,此请求正在处理我发送电子邮件的位置。其他信息显示得非常好,因为它们是存储在诸如区域、状态等变量中的单个值...

谢谢

4

3 回答 3

1

你所需要的只是改变

print while (<$fh>);

$smtp->datasend($_) while (<$fh>);
于 2013-06-23T18:52:35.233 回答
0

您是否在问如何将文件的内容加载到变量中?

my $file; { local $/; $file = <$fh>; }
于 2012-12-31T04:38:49.590 回答
0

默认情况下打印到标准输出,而不是发送到$smtp->data send()发送字符串参数的同一个地方。

我认为您只想重新编写您的 while 循环并正确引导输出;所以...

print while (<$fh>); #is basically saying:
while (<$fh>) {
  print;
} #but in your smtp block, you don't want to be printing, so write
foreach $fileline (<$fh>) { $smtp->datasend($fileline); }

一旦你尝试了,如果它正在工作,因此这解释了哪里出了问题,然后考虑一下用类似的东西一次吞下整个文件:

my $file = "/tmp/devicelist";
open my $fh, '<', $file;
my $filecontents; { local $/; $filecontents = <$fh>; }
$smtp->datasend($filecontents);

除此之外,当你说:

print while (<$fh>);

I am getting this message as :  GLOB(0x11aeea8)

你的意思是,你不想得到 GLOB(0x11aeea8) 或者这是正确的输出?如果是前者,我认为那是因为你想写这样的东西:

while (<$fh>) {print $_;}
于 2012-12-31T05:41:56.517 回答