首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl如何修改Perl语法

Perl如何修改Perl语法
EN

Stack Overflow用户
提问于 2022-06-07 08:33:21
回答 1查看 133关注 0票数 3

我阅读了Mojolicious 奴才文献,发现了以下代码:

代码语言:javascript
复制
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“是一个键,hashref {...}是一个值吗?

另外,他们称app->start - app是一个函数,返回一个有福的hashref?但如果它是一个散列,为什么“开始”不包含在大括号中?这个语法在我看来很奇怪。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-07 09:53:27

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

app->startapp()->start相同

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

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

再生产

代码语言:javascript
复制
perl -MMojolicious::Lite -E 'no warnings; sub foo; local *foo = sub { app }; say for foo, app'

输出

代码语言:javascript
复制
Mojolicious::Lite=HASH(0xe72080)
Mojolicious::Lite=HASH(0xe72080)

plugin是一个正则函数

代码语言:javascript
复制
perl -MData::Dumper -wE 'sub plugin { print Dumper \@_ } plugin Minion => { SQLite => "sqlite:" }'
$VAR1 = [
          'Minion',
          {
            'SQLite' => 'sqlite:'
          }
        ];

您可以添加parens,并删除fat逗号,使其看起来像通常的函数调用,

代码语言:javascript
复制
plugin("Minion", { SQLite => "sqlite:" });
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72528213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档