2017-05-27 93 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.pllong-ago replaced by use IPC::Open2

  • 它不使用use strictuse warnings,避免詞彙變量

  • 函數調用使用奧術&open2語法,它只有在非常特殊的情況下

  • open的呼叫使用老式的和模糊的兩個參數的版本

+0

當@output!= 0(或只是'@ output')會更清晰時,它使用'$#output!= -1'來檢查一個空數組。它使用'chop'而不是'chomp',盲目地刪除最後一個字符而不是檢查換行符。它不是直接調用'POSIX :: strftime'(甚至是標量上下文中的'localtime')而是'date'。 – melpomene

+0

所有這些讓我覺得這段代碼是爲perl4編寫的,它指向90年代初期的某個起源日期(perl5於1994年發佈)。 – melpomene