2017-05-27 14 views
0

マニュアルページに記載されているfpingスクリプトを実行しようとしています。マニュアルページに記述されているfpingスクリプトに構文エラーがあります

#!/usr/local/bin/perl 
require 'open2.pl'; 

$MAILTO = "root"; 

$pid = &open2("OUTPUT","INPUT","/usr/local/bin/fping -u"); 

@check=("slapshot","foo","foobar"); 

foreach(@check) { print INPUT "$_\n"; } 
close(INPUT); 
@output=; 

if ($#output != -1) { 
    chop($date=`date`); 
    open(MAIL,"|mail -s 'unreachable systems' $MAILTO"); 
    print MAIL "\nThe following systems are unreachable as of: $date\n\n"; 
    print MAIL @output; 
    close MAIL; 
} 

しかし、私はそれを実行して、どこからでも、次のエラーを取得:

syntax error at /path/to/pingtest.pl line 13, near "=;" 
Execution of /path/to/pingtest.pl aborted due to compilation errors. 

は、誰かがライン13と間違っているものを私を助けることができますか?私はopen2.plを持っており、fpingのパスは正しいです。

+1

を使う便利です構文は、あなたのソースにリンクしてください情報 – Borodin

答えて

4

オンラインman-pageでスクリプトが見つかった場合は、<OUTPUT>がHTMLマークアップとして解釈され削除されました。それは

@output = <OUTPUT>; 

をお読みください。しかし、それが書かれたように、このPerlスクリプトは、数十年前

  • require open2.plの使用は、それがuse strictまたはuse warningsを使用していないlong-ago replaced by use IPC::Open2

  • だった、と語彙の回避に見えます変数

  • ファンクションコールでは、弧あなたは、外部に問題がある場合にのみ、非常に特殊なケースでopen

  • 呼び出しは昔ながらとあいまいな2引数バージョン

+0

'@output!= 0'(または単に' @ output')が明白になるときに、空の配列をチェックするために '$#output!= -1'を使います。 'chomp'の代わりに' chop'を使い、改行をチェックするのではなく最後の文字を盲目的に削除します。 'POSIX :: strftime'(スカラーコンテキストでは' localtime'さえ)を呼び出すのではなく、 'date'に出てきます。 – melpomene

+0

これは、このコードがperl4のために書かれたと考えています。これは90年代初めのどこかの日付を指しています(perl5は1994年にリリースされました)。 – melpomene

関連する問題