Я пытаюсь добавить «€» в качестве псевдонима для скаляра «$», и я думаю, что делать это со сленгом - это способ сделать это. Но в perl6.doc сленги вообще не упоминаются.
Я прочитал следующее:
И посмотрел на модули Slang :: Roman и Slang :: Tuxic.
В результате получается этот файл (ScalarEU.pm6):
use nqp;
unit module ScalarEU2;
sub EXPORT(|)
{
my role Euscalar
{
token sigil:sym<$> { '€' | '$' }
}
my Mu $MAIN-grammar := nqp::atkey(%*LANG, 'MAIN');
my $grammar := $MAIN-grammar.HOW.mixin($MAIN-grammar, Euscalar);
$*LANG.define_slang('MAIN', $grammar, $*LANG.actions);
{}
}
Затем программа (называемая привет), использующая его:
use lib "lib";
use ScalarEU;
sub MAIN ($name)
{
say "Hello, €name!";
}
Но это не работает, или, скорее, не делает то, что должно:
$ ./hello Tom
Hello, €name!
(я написал программу таким образом, чтобы она не вылетала.)
Я не добавил класс действия, но способ настройки "токен-сигил" не должен этого требовать? Но это предположение основано на статье за 11 лет и может быть ошибочным.
Также, https://github.com/rakudo/rakudo/issues/2404 говорит, что $ * LANG устарел, и вместо него следует использовать $? LANG. REPL согласен:
> $*LANG
Dynamic variable $*LANG not found
> $?LANG
(low-level object `Perl6::Grammar`)
Но программы могут использовать оба без ошибок. (Я пытался.)