Wie schalte ich show_tiedaus, wenn ich DP in Raku verwende?
Sie müssen Associatives (z. B. Pairs), die am Ende einer useAnweisung aufgeführt sind und keine "Tags" sind, explizit in eine reduzierte Liste konvertieren, die Schlüssel und Werte verschachtelt. 1
Die direkteste Lösung besteht darin, manuell eine flache Liste von Literalen zu schreiben, z.
use Data::Printer:from<Perl5> 'show_tied', 0;
Eine übersichtlichere Lösung finden Sie im Abschnitt Verwendenkv unten.
Injizieren von Variablen
Beachten Sie, dass useAnweisungen zur Kompilierungszeit ausgewertet werden . Wenn Sie also Variablen in die Liste einfügen möchten, müssen Sie sicherstellen, dass ihre Werte und nicht nur ihre Namen zur Kompilierungszeit festgelegt werden , bevor die useAnweisung ausgewertet wird. Ein schmuckloses my $foo = 0;Produkt reicht nicht aus, da das = 0Teil zur Laufzeit ausgeführt wird . Stattdessen müssen Sie ein geeignetes Kompilierung-Konstrukt verwenden , wie zum Beispiel BEGIN:
BEGIN my $foo = 0;
use Data::Printer:from<Perl5> 'show_tied', $foo;
Verwenden von kv
Die kvRoutine kann die gewünschte 'key1', value1, 'key2', value2, ...Sequenz mit einem Hash erzeugen :
use Data::Printer:from<Perl5> kv { show_tied => 0 }
oder:
BEGIN my %opts = show_tied => 0;
use Data::Printer:from<Perl5> kv %opts;
Fußnoten
1 Diese Antwort basiert auf Stefans Erklärung aus dem Problem, das ich als Antwort auf die "Ändern von Parametern in Data :: Printer in Raku" SO :
Die Lösung ist ziemlich einfach: Verwendung Data::Printer:from<Perl5> 'show_tied', 0;Das Fettkomma =>ist ein PairKonstruktor in Raku, während es in Perl 5 eigentlich nur ein ausgefallenes Komma ist. Raku betrachtet PairArgumente als zum Importieren von Tags wie :ALL(was äquivalent zu ist ALL => True). Um dies zu umgehen und den erwarteten Perl 5-Code zu übergeben, listen Sie die Werte einfach einzeln auf.
Mit anderen Worten, dies ist notwendig für die Konvertierung , weil Perl und Raku der Anteil Vorstellung von Tags ( Perl doc über „Tags“ , Raku doc über „Tags“ ) und (nicht zufällig) idiomatisch die gleiche Syntax für die Auswahl - Tags ( :tagname).
Bei Verwendung von Raku gilt dieses Problem der (zu lösenden) Mehrdeutigkeit zwischen der Verwendung der Syntax zur Angabe von Tags und nicht für alle Associative s, die in der obersten Ebene einer useAnweisung verwendet werden, nicht nur für diejenigen, die in der Form geschrieben wurden, :foosondern auch für diejenigen, die geschrieben wurden in anderen Formen wie zum Beispiel foo => bar, { foo => bar}, %baz, oder { %baz }.
varVariablen. Es sieht nicht so aus, als ob dieses Paket sogar in Raku funktioniert. Es ist eine Schande, in Perl es funktioniert wunderbar: (