Wie schalte ich show_tied
aus, wenn ich DP in Raku verwende?
Sie müssen Associative
s (z. B. Pair
s), die am Ende einer use
Anweisung 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 use
Anweisungen 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 use
Anweisung ausgewertet wird. Ein schmuckloses my $foo = 0;
Produkt reicht nicht aus, da das = 0
Teil 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 kv
Routine 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 Pair
Konstruktor in Raku, während es in Perl 5 eigentlich nur ein ausgefallenes Komma ist. Raku betrachtet Pair
Argumente 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 use
Anweisung verwendet werden, nicht nur für diejenigen, die in der Form geschrieben wurden, :foo
sondern auch für diejenigen, die geschrieben wurden in anderen Formen wie zum Beispiel foo => bar
, { foo => bar}
, %baz
, oder { %baz }
.
var
Variablen. Es sieht nicht so aus, als ob dieses Paket sogar in Raku funktioniert. Es ist eine Schande, in Perl es funktioniert wunderbar: (