1

私はslapd_ほとんど無知なperlで書かれたmuninプラグインを実装しようとしています。完全なプラグインはこちらから入手できます。私が得ているエラーはこれです:

Use of uninitialized value in concatenation (.) or string at
/etc/munin/plugins/slapd_localhost line 232, <DATA> line 275.

232行目は次のとおりです。

 my $searchdn = $ops{$action}->{'search'} . "," . $basedn;

次のようにすべての変数/オブジェクトを出力してデバッグを試みました。

use Data::Dumper;   # top of script
# [...]
print Dumper(%ops);
print "action = [$action]\n";
print "basedn = [$basedn]\n\n";
my $searchdn = $ops{$action}->{'search'} . "," . $basedn;

もう一度実行すると、次のようになります。

[...] # 15 other variables belonging to $ops
$VAR16 = {
           'info' => 'The graph shows the number of Waiters',
           'search' => 'cn=Waiters',
           'desc' => 'The current number of Waiters',
           'filter' => '(|(cn=Write)(cn=Read))',
           'title' => 'Number of Waiters',
           'label2' => {
                         'read' => 'Read',
                         'write' => 'Write'
                       },
           'vlabel' => 'Waiters'
         };
action = [localhost]
action = [cn=Monitor]

Use of uninitialized value in concatenation (.) or string at /etc/munin/plugins/slapd_localhost line 237, <DATA> line 275.

すべての変数が設定されているように見えるため、表示されるエラー メッセージがよくわかりません

Q: このスクリプトのデバッグ方法について誰かアドバイスをいただけますか?

4

1 に答える 1

3

次のように、への参照をダンプする必要があります。%ops

print Dumper \%ops;

これにより、デバッグ出力がより明確になります。説明のために、次の出力を考えてみましょう。

#! /usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my %h = (foo => { bar => 1 }, baz => { quux => 3 });

print "No reference:\n",
      Dumper(%h),
      "\n",
      "Reference:\n",
      Dumper(\%h);

後半で構造がより明確に見えることに注意してください。

参照なし:
$VAR1 = 'バズ';
$VAR2 = {
          'quux' => 3
        };
$VAR3 = 'フー';
$VAR4 = {
          'バー' => 1
        };

参照:
$VAR1 = {
          'バズ' => {
                     'quux' => 3
                   }、
          'フー' => {
                     'バー' => 1
                   }
        };

出力の重要な部分を切り取ります。の値は$VAR15? それ"localhost"か他の何かですか?

を出力すると$searchdn、その値は?

于 2011-11-18T11:55:23.593 に答える