Да, недавно был подобный топик, я покопался, думал что все понял и снес, оказалось что понял, но как это в perl реализовать не понял.
Имеется скрипт для разбора бинарных ama файлов от iskra si3000, но с теми файлами что еть у меня он не работает, ругается на енсущнствующие block:
Undefined subroutine &CDR::Parser::SI3000::block_124 called at /usr/local/share/perl/5.32.1/CDR/Parser/SI3000.pm line 597.
Кусок кода, который возвращает ошибку:
my $block_marker;
while( length($variable) > 0) {
($block_marker, $variable) = unpack('C a*', $variable);
{
no strict 'refs';
my $sub = 'block_' . $block_marker;
$sub->(\%call, \$variable);
}
}
Как я понимаю, тут имя вызываемой функции происходит из объединения двух текстовых переменных. И если в бинарнике есть номер блока, который скрипту неизвестен то возвращается ошибка. Получается что мне нужно сделать обработку (игнорирование) ошибки при вызове
$sub->(\%call, \$variable);
. Кто может подсказать как сделать в perl, своими силами искал до ничего не понял.