perl - 使用给出错误

时间:2017-02-17 17:54:57

标签: perl nagios

我差不多完成了一个nagios插件,我正在使用这个guide.我收到了错误但是我不知道为什么。

<ul class="mostread<?php echo $moduleclass_sfx; ?>">

    <?php 
    $first = true;//initially set true
    foreach ($list as $item) : ?>
      <?php $images = json_decode($item->images); ?>
        if($first==true){ ?> //checks $first is true if true prints
        <?php if( $images->image_intro ) : ?>
            <img src="<?php echo $images->image_intro; ?>" alt="<?php echo htmlspecialchars($item->title); ?>" />
        <?php endif;

    <li itemscope itemtype="https://schema.org/Article">
        <a href="<?php echo $item->link; ?>" itemprop="url">
            <span itemprop="name">
                <?php echo $item->title; ?>
            </span>
        </a>
    </li> 

    <?php 
    }
    $first = false;//after printing first item set it false
    endforeach; ?>


</ul>

我在#!/bin/perl use strict; use warnings; my $warn = 20; my $crit = 50; my $percent_down = 10; my $percent_up = 90; my $err = "error"; given ($percent_down) { when ($percent_down lt $warn) { print "OK - $percent_up% UP"; exit 0;} when ($percent_down ge $warn && lt $crit ) { print "WARNING - $percent_down% DOWN"; exit (1);} when ($percent_down ge $crit) { print "CRITICAL - $percent_down% DOWN"; exit (2);} default { print "UNKNOWN - $err "; exit (3);} } 处的given ($percent_down) {开始语法错误,然后在") {"之后的每一行开始语法错误。

3 个答案:

答案 0 :(得分:4)

要使用given,您需要

no if $] >= 5.018, warnings => "experimental::smartmatch";
use feature qw( switch );

此外,

$percent_down ge $warn && lt $crit

应该是

$percent_down ge $warn && $percent_down lt $crit

现在针对您没有提出的问题。

ltge用于比较字符串。使用<>=来比较数字。 (例如,9 ge 10为真。)

最后,您不应该使用given - when。这是一个实验性功能,将来会以向后兼容的方式删除或更改

解决上述问题并删除冗余检查后,您将看到以下内容:

if ($percent_down < $warn) {
   print "OK - $percent_up% UP";
   exit(0);
}

if ($percent_down < $crit) {
   print "WARNING - $percent_down% DOWN";
   exit(1);
}

print "CRITICAL - $percent_down% DOWN";
exit(2);

答案 1 :(得分:1)

出于多种原因,建议您避免givenwhen。即使您正确启用了该功能,您也会收到另一条警告消息,告诉您该功能是实验性的,并且无论如何您都没有使用该功能有用的功能 - 主要是智能匹配,这也是实验性的< / p>

永远不能输入最后的when块,因为前面的条件涵盖了所有可能性

我建议您使用if elsif else这样的序列来编写它。我相信它更具可读性

#!/bin/perl

use strict;
use warnings 'all';

my $warn = 20;
my $crit = 50;

my $percent_down = 10;
my $percent_up   = 100 - $percent_down;

if ( $percent_down < $warn ) {
    print "OK - $percent_up% UP";
    exit 0;
}
elsif ( $percent_down < $crit ) {
    print "WARNING - $percent_down% DOWN";
    exit 1;
}
else {
    print "CRITICAL - $percent_down% DOWN";
    exit 2;
}

答案 2 :(得分:-2)

感谢评论,我明白了。

if ($percent_down lt $warn) {
        print "OK - $percent_up% UP";
        exit 0;
        } elsif ($percent_down ge $warn && $percent_down lt $crit ) {
        print "WARNING - $percent_down% DOWN";
        exit 1;
        } elsif ($percent_down ge $crit) {
        print "CRITICAL - $percent_down% DOWN";
        exit 2;
        } else {
        print "UNKNOWN - $err ";
        exit 3;
        }