0

F5 ロード バランサ用の Nagios 用の Perl プラグインを作成しています。プール名を、SNMP の OID に一致する 10 進形式に変換する必要があります。

my ( $PoolName )         = $ARGV[1];
my ( $rootOIDPoolStatus ) = '1.3.6.1.4.1.3375.2.2.5.5.2.1.2';

たとえば、これを に変換してから に変換する必要があります$PoolName"/Common/Atlassian"/.C.o.m.m.o.n./.A.t.l.a.s.s.i.a.n47.67.111.109.109.111.110.47.65.116.108.97.115.115.105.97.110

それが変換されると、それらは1つの変数に取り込まれます

my ( $PoolStatus ) = "$rootOIDPoolStatus.$OIDPoolName"

私は Nagios 用に他の人の Perl プラグインを逆方向に設計しており、これは他の誰かが行っていることですが、どのような組み合わせを行っていても機能させることができませんでした。彼ら$nameは私のものだろう$PoolName

sub to_oid($) {
    my $oid;
    my ($name) = $_[0];
    return "" if ( ! $name );
    $oid = ( length $name ) . '.' . ( join '.', ( map { unpack 'C', $ } ( split '',$name ) ) );
    return $oid;
}

$PoolNameOID に必要な 10 進形式に変換するために、Perl ロジックを構築または理解するのを手伝ってくれる人はいますか?

4

3 に答える 3

2
my $poolStatus = join '.', $rootOIDPoolStatus, map ord, split //, $poolName;

あなたのコードで length() が何のためにあるのかわからない、あなたの例ではそのようなものは何も示していません。

于 2017-10-25T20:39:43.143 に答える
0
my $PoolStatus = join('.', $rootOIDPoolStatus, unpack('C*', $PoolName));

また

my $PoolStatus = sprintf("%s.%vd", $rootOIDPoolStatus, $PoolName);
于 2017-10-25T21:15:04.863 に答える