gpt4 book ai didi

perl - Mojolicious 如何修改 Perl 语法

转载 作者:行者123 更新时间:2023-12-05 01:23:21 24 4
gpt4 key购买 nike

阅读 Mojolicious minions documentation我找到了以下代码:

use v5.28;
use Mojolicious::Lite;
use experimental qw( signatures );
use Time::HiRes qw( time );

plugin Minion => {
SQLite => 'sqlite:' . app->home->child('minion.db'),
};

# ...
app->start;

他们是如何创建新语法 plugin Minion => {...} 的?我从未在经典的 Perl 书籍中见过它。它是一个带有散列参数的函数调用:“Minion”是一个键,散列引用 {...} 是一个值?

他们还调用了 app->start - app 是一个返回 blessed hashref 的函数吗?但如果它是一个散列,为什么“开始”没有被括在大括号中?这种语法对我来说很奇怪。

最佳答案

app 是一个返回 $app 的函数,它是 Mojolicious::Lite=HASH

的一个实例

app->startapp()->start

相同

https://github.com/mojolicious/mojo/blob/24d1d1987dbfbe27eaaa37dd5db692d2deb8d07f/lib/Mojolicious/Plugin/Config.pm#L12-L14

"sub app; local *app = sub { \$app }; use Mojo::Base -strict; $content";
|
^ not a reference but escape
due to eval() of double quoted string

复制

perl -MMojolicious::Lite -E 'no warnings; sub foo; local *foo = sub { app }; say for foo, app'

输出

Mojolicious::Lite=HASH(0xe72080)
Mojolicious::Lite=HASH(0xe72080)

plugin 是一个常规函数

perl -MData::Dumper -wE 'sub plugin { print Dumper \@_ } plugin Minion => { SQLite => "sqlite:" }'
$VAR1 = [
'Minion',
{
'SQLite' => 'sqlite:'
}
];

您可以添加括号,并删除粗逗号以看起来像通常的函数调用,

plugin("Minion", { SQLite => "sqlite:" });

关于perl - Mojolicious 如何修改 Perl 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72528213/

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