1

デバイス名を含むファイルが 1 つあります。これは、地域に応じてシェル スクリプトからの出力です。したがって、地域は変更可能な変数です。

次に、このデバイス リストを電子メールの本文に追加します。メールを送信するために、私は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 に答える