Okay, ich habe immer noch Probleme mit Perl6 Grammatik und Aktion. Ich möchte ein Muster in einer Zeichenfolge finden, und sobald es gefunden wird, ändern Sie das Muster entsprechend der Aktion und geben Sie die geänderte Zeichenfolge zurück.Perl6 Grammatik und Aktion Fehler: "Methode 'Ann' auf Objekt vom Typ NQPMu nicht gefunden werden"
my $test = "xx, 1-March-23, 23.feb.21, yy foo 12/january/2099 , zzz";
# want this result: xx, 010323, 230221, yy foo 120199 , zzz";
# 2 digits for day, month, year
grammar month {
regex TOP { <unit>+ }
regex unit { <before> <form1> <after> }
regex before { .*? }
regex after { .*? }
regex form1 { \s* <dd> <slash> <mon> <slash> <yy> \s* }
regex slash { \s* <[ \- \/ \. ]> \s* }
regex dd { \d ** 1..2 }
regex yy { (19 | 20)? \d\d }
proto regex mon {*}
regex mon:sym<jan> { \w 'an' \w* }
regex mon:sym<feb> { <sym> }
regex mon:sym<mar> { <[Mm]> 'ar' \w* }
}
class monAct {
method TOP ($/) { make $<unit>.map({.made}); }
method unit ($/) { make $<before> ~ $<form1>.made ~$<after>; }
method form1 ($/) { make $<dd>.made ~ $<mon>.made ~ $<yy>; }
method dd ($/) {
my $ddStr = $/.Str;
if $ddStr.chars == 1 { make "0" ~ $ddStr; } else { make $ddStr; }
}
method mon:sym<jan> ($/) { make "01"; };
method mon:sym<feb> ($/) { make "02"; };
method mon:sym<mar> ($/) { make "03"; };
}
my $m = month.parse($test, actions => monAct.new);
say $m;
say $m.made;
Aber es sagt:
=== SORRY === Die Methode kann nicht 'ann' auf Objekt vom Typ finden NQPMu
Was habe ich falsch gemacht!? Danke für Ihre Hilfe !!!
Danke Christoph! Ich habe den Fehler gemeldet. – lisprogtor
[Link zu rt] (https://rt.perl.org/Public/Bug/Display.html?id=130218#txn-1437532) Vielen Dank @lisprogtor – raiph