>эмм.. тогда разберись с типом переменной $mac, см. perl доки. как известно
>переменные могут быть char, int, double, float, long это опять таки
>из Си, посмотри откуда зачитывается твоя $mac т.е. откуда и как
>в нее попадают твои данные. вообще трудно судить, не видя исходников.
>
Код приведен ниже.
Когда $length равен 6, то распечатка print-ом переменной $mac дает результат подобно 0O-xN
Когда $length НЕ равен 6 (он бывает разного размера - и 14, и 17, и 16), то распечатка print-ом переменной $mac дает результат подобный 0x00304f2ef032, т.е. тот, который и нужен
------------------------------------------
# cat test.pl
#!/usr/bin/perl
use strict;
use Net::SNMP;
my $hostname = "192.168.0.10";
my $password = "public";
my $dot1dTpFdbAddress = ".1.3.6.1.2.1.17.4.3.1.1";
my $dot1dTpFdbPort = ".1.3.6.1.2.1.17.4.3.1.2";
my $dot1dTpFdbStatus = ".1.3.6.1.2.1.17.4.3.1.3";
my @table = ();
my ( $ObjectID, $ObjectID1, $ObjectID2 );
my $port;
my $mac;
my $status;
my $result;
my $length;
my ( $session, $error ) = Net::SNMP->session (
Hostname => $hostname,
Community => $password
);
die "session error: $error" unless ( $session );
$ObjectID = $dot1dTpFdbPort;
for ( ; ; ) {
$result = $session->get_next_request (
varbindlist => [$ObjectID]
);
die "request error: ".$session->error unless ( defined $result );
( $ObjectID, $port ) = each %$result;
unless ( $ObjectID =~ /$dot1dTpFdbPort(.*)/ ) { last; }
$ObjectID1 = $dot1dTpFdbAddress.$1;
$ObjectID2 = $dot1dTpFdbStatus.$1;
$result = $session->get_request (
varbindlist => [$ObjectID1]
);
die "request error: ".$session->error unless ( defined $result );
$mac = "$result->{$ObjectID1}";
$length = length $mac;
$result = $session->get_request (
varbindlist => [$ObjectID2]
);
die "request error: ".$session->error unless ( defined $result );
$status = "$result->{$ObjectID2}";
print "$port\t$mac\t$length\t$status\n";
}
$session->close;
------------------------------------------
запускаем:
------------------------------------------
# ./test.pl
1 0x0007e997013a 14 3
9 0x0007e997453b 14 3
1 0x0008a12ce4e6 14 3
10 0x000039377e8f 14 3
1 0O-_( 6 3
1 0O-xN 6 3
1 0O-xU 6 3
13 0x08004668f49f 14 3
1 0x2680000020d6 14 3
------------------------------------------
вот такая вот фигня...