¿Cómo show_tiedapago cuando uso DP en Raku?
Debe convertir explícitamente Associatives (por ejemplo, Pairs) que se enumeran al final de una usedeclaración, que no son "etiquetas", en una lista aplanada que entrelaza claves y valores. 1
La solución más directa es escribir manualmente una lista plana de literales, por ejemplo:
use Data::Printer:from<Perl5> 'show_tied', 0;
Para una solución más ordenada, consulte la sección Uso akv continuación.
Inyectando variables
Tenga en cuenta que las usedeclaraciones se evalúan en tiempo de compilación . Entonces, si desea inyectar variables en la lista, entonces debe asegurarse de que sus valores, no solo sus nombres, también se establezcan en tiempo de compilación , antes de useevaluar la declaración. Un sin adornos my $foo = 0;no será suficiente porque la = 0parte sucederá en tiempo de ejecución . En su lugar, deberá utilizar una construcción adecuada en tiempo de compilación como BEGIN:
BEGIN my $foo = 0;
use Data::Printer:from<Perl5> 'show_tied', $foo;
Utilizando kv
La kvrutina puede generar la 'key1', value1, 'key2', value2, ...secuencia deseada dado un hash:
use Data::Printer:from<Perl5> kv { show_tied => 0 }
o:
BEGIN my %opts = show_tied => 0;
use Data::Printer:from<Perl5> kv %opts;
Notas al pie
1 Esta respuesta se basó en la explicación de Stefan del problema que abrí en respuesta a la "Alteración de parámetros en Datos :: Impresora en Raku" SO :
La solución es bastante simple: usar Data::Printer:from<Perl5> 'show_tied', 0;La coma gruesa =>es un Pairconstructor en Raku, mientras que en realidad es solo una coma elegante en Perl 5. Raku considera que los Pairargumentos se usan para importar etiquetas como :ALL(que es equivalente a ALL => True). Para evitar esto y pasar lo que el código de Perl 5 espera, solo enumere los valores individualmente.
En otras palabras, esta necesidad de conversión se debe a que Perl y Raku comparten la noción de etiquetas ( documento de Perl sobre "etiquetas" ; documento de Raku sobre "etiquetas" ) y (no por casualidad) usan idiomáticamente la misma sintaxis para seleccionar etiquetas ( :tagname).
Además, usando Raku, este problema de (la necesidad de resolver) la ambigüedad entre si la sintaxis se está utilizando para especificar etiquetas o no se aplica a todos Associative los correos electrónicos utilizados en el nivel superior de una usedeclaración, no solo los escritos en el formulario :foosino incluso los escritos en otras formas tales como foo => bar, { foo => bar}, %baz, o { %baz }.
varvariables terribles . Parece que este paquete ni siquiera funciona en Raku. Es una pena, en Perl funciona de maravilla: (