man页面中描述的fping脚本具有语法错误

时间:2017-05-27 16:51:34

标签: perl

我正在尝试运行其手册页中描述的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 个答案:

答案 0 :(得分:4)

如果您在联机man-page上找到了该脚本,则<OUTPUT>已被解释为HTML标记并已删除。它应该读

@output = <OUTPUT>;

但是这个Perl脚本看起来像几十年前写的那样

  • require open2.pl的使用是long-ago replaced by use IPC::Open2

  • 它不使用use strictuse warnings,并且避免使用词汇变量

  • 函数调用使用神秘的&open2语法,仅在非常特殊的情况下才有用

  • open的调用使用了老式且含糊不清的双参数版本