gpt4 book ai didi

perl - 舞者2 : fetching nested data from hash stored in YAML session

转载 作者:行者123 更新时间:2023-12-01 13:39:53 25 4
gpt4 key购买 nike

我正在使用 Dancer2 和 YAML session 引擎。我使用以下代码在 session 中存储了完整的哈希值:

post '/login' => sub {
# ...
my $userdata = {
fname => 'John',
lname => 'Doe',
uid => 1234,
};
# ...
session userdata => $userdata;
# ...
}

省略的代码根据数据库检查登录数据并返回 $userdata哈希引用。此代码在 $appdir/sessions 下创建一个 session 文件,内容如下:

session 文件

userdata:
fname: John
lname: Doe
uid: 1234

如何在我的 app.pm 中从该 session 中检索单个值文件?它在模板文件 (*.tt) 和 <% session.userdata.fname %> 中效果很好产量 John , 正如预期的那样。但是,我想获取 app.pm 中的名字,像这样:

get '/userdetails' => sub {
my $firstname = session('userdata.fname'); # gives undef
# do sth. with $firstname
}

这可行吗?或者我必须

my $userdata = session('userdata'); # fetch complete hash
# do sth. with $userdata->{fname}

我试过了

  • session('userdata.fname')
  • session('userdata/fname')
  • session('userdata:fname')
  • session('userdata fname')
  • RTFM(YAML 和 Dancer2)

但他们都没有工作并给了undef .手册和教程仅获取“第一级值”,而不是嵌套值。

最佳答案

Template Toolkit 语法完全独立于 Perl Dancer2,您应该期望任何形式的寻址都可以继承。作为 YAML 文件的数据来源也无关紧要,因为 Dancer session 只是一个 Perl 哈希结构

<罢工>手册上没有说的很清楚,但是

session('userdata')

相同
session->{userdata}

所以你可以使用

session->{userdata}{fname}

读取子字段

<罢工>

(如果您愿意,也可以是 session('username')->{fname},但这对我来说有点恶心!)

请注意,您不应在生产代码中使用 YAML session 引擎,因为它非常慢

关于perl - 舞者2 : fetching nested data from hash stored in YAML session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41211811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com