【问题标题】:Errors accessing hash in mojolicious在 mojolicious 中访问哈希时出错
【发布时间】:2019-03-05 20:55:20
【问题描述】:

我在 mojolicious 中访问我的哈希时遇到问题。

my %managers = (
'IT' => {
    'name' => 'Mike',
    'id'   => 1,
    'num_of_employees' => 15,
},
'Sales' => {
    'name' => 'John',
    'id' => 33,
    'num_of_employees'=> 50,
},
);

在 perl 中,我可以访问像 $managers{'IT'}{'name'} 这样的数据,会打印出 Mike。我如何在 mojolicious 中做同样的事情?

Being passed to my template
$g->stash(manage => \%managers);
<%== $manage{'IT'}{'name'} %>

上面会抛出一个错误。打印&lt;%== $manage %&gt; gives a HASH(0x1335430) 位置。

【问题讨论】:

  • " $g->stash(manage => \%managers); " 你不应该把两者都叫同一个吗? “管理”还是“经理”?您在 perl 中的键是“管理”,但在您的模板中您尝试访问“管理器”
  • 抱歉打错了。但是当我打印&lt;%== $manage{'IT'}{'name'} %&gt; 时仍然出现错误错误是`全局符号“%manage”需要明确的包名(你忘了声明“我的%manage”吗?)`并且&lt;%== $manage %&gt; gives a HASH(0x1335430) 给出了一个位置

标签: perl mojolicious mojolicious-lite


【解决方案1】:

在您的模板中,$manage 是一个哈希引用而不是哈希,因此您需要像这样使用 -&gt; 运算符来取消引用它

<%== $manager->{'IT'}{'name'} %>

【讨论】:

  • 经过更多阅读后,我认为这是一个问题。我现在收到Can't use string ("Sales") as a HASH ref while "strict refs"
  • 该错误意味着$manager-&gt;{'IT'} 设置为字符串Sales,而不是您期望的另一个哈希引用。
  • 不确定,但现在它正在工作。也许是一个错字。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 2017-10-04
  • 2014-05-06
  • 2016-01-20
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
相关资源
最近更新 更多