У меня есть фрагмент кода, который используется 60K раз, прежде чем он не сработает на данных, которые похожи на все другие вызовы. Я получаю сообщение «Не ссылка на HASH». Код выглядит так:
sub getRowKey
{
my ($self,$row) = @_;
my @keys = split(/,/,$self->{_key});
my $rowkey = "";
confess "Not a non-reference" if ( ! defined( ref( $row ) ) );
confess "no keys found". Dumper($row ) if( scalar(@keys) == 0);
foreach my $k (@keys)
{
try
{
$rowkey .= "," if $rowkey ne "";
$rowkey .= $row->{$k};
}
catch Error with
{
$ex = shift;
print "rowkey = '$rowkey' k = '$k'\n";
print Dumper($ex);
print Dumper($row);
confess "Exception: " . $ex->{-text};
}
;
}
return $rowkey;
}
Когда код видит исключение: я получаю следующий вывод:
rowkey = '' k = 'TopicId'
$VAR1 = bless( {
'-file' => 'baseDB.pm',
'-text' => 'Not a HASH reference',
'-line' => '95',
'-package' => 'Error'
}, 'Error::Simple' );
$VAR1 = \{ ## note this is a a reference!
'LastReplyId' => 8563,
'LastPostDate' => '2006-06-21 13:37:48',
'TopicId' => '8563', ## note this is they name/value pair to be accessed
'LastTopicDate' => '2000',
'LastReplyDate' => '2006-06-21 13:37:48',
'ForumId' => '84',
'LastPostData' => '...'
}
Спасибо за вашу помощь и предложения.