PERL | Благословенный объект в хеше | Rose::DB::Object
Я пытаюсь выяснить, почему я не могу получить доступ к благословенной ссылке внутри элемента:
Это мой модуль:
package Test::Node
__PACKAGE__->meta->setup(
table => 'node',
columns => [
id => { type => 'serial', not_null => 1 },
name => { type => 'varchar', length => 128, not_null => 1 },
],
primary_key_columns => [ 'id' ],
relationships =>
[
alias =>
{
type => 'one to many',
class => 'Test::Alia',
column_map => { id => 'asset_id' },
},
],
Это сабвуфер, который я вызываю для тестирования:
sub SearchNode {
my $self = shift;
my ($opts) = shift;
my %query = (name => { like => "$opts->{name}%"});
my %object = (with_objects => ['alias']);
$object{query} = [%query] if $opts->{name};
my $records = Test::Node::Manager->get_node(%object);
my $i = 0;
my $record = {};
$record->{page} = 1;
$record->{total} = 1;
foreach (@$records) {
my %items =(
id => $_->id,
name => $_->name,
alias => $_->alias->alias
);
$record->{rows}[$i] = \%items;
$i++;
}
$record->{records} = $i;
return $record;
}
Если я использую псевдоним $_->, я получаю следующее:
$ ./search.pl
$VAR1 = {
'page' => 1,
'records' => 1,
'rows' => [
{
'name' => 'test.localhost.net',
'id' => '1234',
'alias' => bless( {
'node_id' => '1234',
'id' => '5678',
'alias' => 'server1.localhost.net'
}, 'Test::Alia' )
}
],
'total' => 1
};
Если я использую $_->alias->alias, я получаю сообщение об ошибке:
./search.pl
Can't call method "alias" on unblessed reference at /usr/local/lib/perl/Test/Node.pm line 41.
Я немного сбит с толку, так как вывод Dumper показывает, что значение Alias является благословением, что, кажется, противоречит сообщению об ошибке.
1 ответ
Решение
Выход Dumper показывает, что $_->alias
вернуть хеш-реф, а не объект. Чтобы получить доступ к псевдониму объекта в структуре, вам нужно что-то вроде:
$_->{rows}[0]{alias};
Чтобы получить доступ к псевдониму этого объекта:
$_->{rows}[0]{alias)->alias;