Я использую Perl для разбора вывода из objdump
.У меня есть следующий код:
#!/usr/bin/perl
%count = {};
while (<>) {
if (/^\s+[[:xdigit:]]+:\s+[[:xdigit:]]+\s+([a-z]+).+$/) {
++$count{"$1"};
}
}
while (($key, $val) = each %count) {
print "$key $val\n";
}
В полученном выводе большинство частей в порядке, как это:
strhib 2
strcc 167
stmlsda 4
swivc 21
ldmlsia 4
Но есть одна странная строка:
HASH(0x8ae2158)
Что здесь происходит?Я ожидаю, что $1
будет строкой, а ++$count{"$1"}
должно быть прекрасно.
Спасибо.
Итак, правильный код должен быть:
#!/usr/bin/perl
use strict;
my %count;
while (<>) {
if (/^\s+[[:xdigit:]]+:\s+[[:xdigit:]]+\s+([a-z]+).+$/) {
++$count{"$1"};
}
}
while (my ($key, $val) = each %count) {
print "$key $val\n";
}