【发布时间】:2018-02-23 09:19:34
【问题描述】:
我在会话中存储一个哈希。我正在尝试从会话中检索值,但没有成功。我想遍历会话中的哈希值以生成一个选择框。下面是会话值
$VAR1 = {
'userDetails' => {
'roles' => [
{
'ln' => 'asdf',
'email' => 'test@example.com',
'session_id' => '14',
'is_active' => '0',
'role' => 'ndfbfd',
'facility_name' => 'jjjj',
'fn' => 'yyyyyy'
},
{
'ln' => 'asdf',
'email' => 'test@example.com',
'session_id' => '15',
'is_active' => '1',
'role' => 'ndfbfd',
'facility_name' => 'fbhsdf',
'fn' => 'yyyyyy'
},
{
'ln' => 'asdf',
'email' => 'test@example.com',
'session_id' => '16',
'is_active' => '1',
'role' => 'ndfbfd',
'facility_name' => 'mvsd',
'fn' => 'yyyyyy'
},
{
'ln' => 'asdf',
'email' => 'test@example.com',
'session_id' => '17',
'is_active' => '1',
'role' => 'bdfgre',
'facility_name' => 'jjjj',
'fn' => 'yyyyyy'
},
{
'ln' => 'asdf',
'email' => 'test@example.com',
'session_id' => '18',
'is_active' => '0',
'role' => 'gderere',
'facility_name' => 'jjjj',
'fn' => 'yyyyyy'
}
],
'ln' => 'asdf',
'logged_in' => '1',
'fn' => 'yyyyyy'
},
'logged_in' => '1',
'username' => 'test@example.com'
};
我正在尝试从会话中检索角色
my %userDetails = $self->session('userDetails');
my %roles = $userDetails{'roles'};
foreach my $family ( keys %roles ) {
print "$family: { ";
for my $role ( keys %{ $HoH{$family} } ) {
print "$role=$HoH{$family}{$role} ";
}
print "}\n";
}
显示两个错误。
Reference found where even-sized list expected.
Odd number of elements in hash assignment.
当我将代码 my %userDetails = $self->session('userDetails'); 更改为 my %userDetails = \$self->session('userDetails'); 时出现错误
Odd number of elements in hash assignment.
Odd number of elements in hash assignment.
【问题讨论】:
-
您的代码似乎与您显示的数据完全无关,我看不出它如何产生您所说的错误。
$self->session('userDetails')返回一个哈希引用,而不是一个哈希,roles是一个数组,而不是一个哈希。您的数据中没有提到family,并且您从不声明或定义%HoH(无论如何这是一个变量的惰性名称)。 -
只是一个变量名。我刚刚从某个地方复制了 foreach 代码。问题在于行
my %userDetails = $self->session('userDetails'); my %roles = $userDetails{'roles'}; -
你不能通过“从某处复制代码”来编写工作代码。你显然不知道你在写什么。
-
我确实知道我在写什么。我是一名尝试学习 Perl 的 PHP 程序员。
标签: perl mojolicious strawberry-perl