【发布时间】:2015-09-02 22:29:22
【问题描述】:
这是我的代码..我正在尝试创建一个哈希查找表并在每个循环中访问它的数据..
#! usr/bin/perl
use warnings;
use strict;
sub bin2dec
{
return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
while(<>)
{
if(/SIB_DBG/)
{
if(/TTRB:\s*([\da-f]+)\s([\da-f]+)\s([\da-f]+)\s([\da-f]+)/ ||
/ETRB:\s*([\da-f]+)\s([\da-f]+)\s([\da-f]+)\s([\da-f]+)/ ||
/Command\sETRB\s*([\da-f]+)\s([\da-f]+)\s([\da-f]+)\s([\da-f]+)/ )
{
print "$_ $1 $2 $3 $4\n";
my $deci1 = hex($1);
my $deci2 = hex($2);
my $deci3 = hex($3);
my $deci4 = hex($4);
my $bin = reverse sprintf("%032b",$deci4); #convert to 32 bit binary and reverse
print "\nbinary :$bin\n";
my $sub = substr($bin ,16,6); #extract required 6 bits
print "string :$sub\n";
my $type = bin2dec($sub);
my $val = $trb{"$type"};
print "TRB type: $type\n";
print "detail: $val\n";
}
}
}
my %trb = (
0 => "reserved",
32 => "transfer event",
48 => "vendor defined");
但即使我声明了 trb 也会出现错误。
全局符号“%trb”需要在 script.plx 第 31 行明确的包名称。 由于编译错误,script.plx 的执行中止。
我的输入日志文件又是这样的
Aug 31 15:25:53 usb3 kernel: [ 78.684054] SIB_DBG TTRB:00000000 00000000 00000000 00002401, PTR: ffff88005ff8b000
Aug 31 15:25:53 usb3 kernel: [ 78.815428] SIB_DBG ETRB: 5ff8b850 00000000 01000000 01018001
【问题讨论】:
标签: perl