閱讀 Mojolicious minions檔案,我發現以下代碼:
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 的函式嗎?但如果它是一個散列,為什么“開始”沒有括在大括號中?這種語法對我來說看起來很奇怪。
uj5u.com熱心網友回復:
app
是一個函式,它回傳$app
一個實體Mojolicious::Lite=HASH
app->start
和app()->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:" });
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/488111.html