Como desligo show_tied
ao usar o DP no Raku?
Você deve converter explicitamente Associative
s (por exemplo, Pair
s) listados no final de uma use
instrução, que não são "tags", em uma lista nivelada que intercala chaves e valores. 1
A solução mais direta é escrever manualmente uma lista simples de literais, por exemplo:
use Data::Printer:from<Perl5> 'show_tied', 0;
Para uma solução mais limpa, consulte a seção Usandokv
abaixo.
Injetando variáveis
Observe que as use
instruções são avaliadas em tempo de compilação . Portanto, se você deseja injetar variáveis na lista, precisa garantir que seus valores, não apenas seus nomes, também sejam estabelecidos em tempo de compilação , antes que a use
instrução seja avaliada. Um sem adorno my $foo = 0;
não será suficiente porque a = 0
peça ocorrerá em tempo de execução . Em vez disso, você precisará usar uma construção de tempo de compilação adequada, como BEGIN
:
BEGIN my $foo = 0;
use Data::Printer:from<Perl5> 'show_tied', $foo;
Usando kv
A kv
rotina pode gerar a 'key1', value1, 'key2', value2, ...
sequência desejada com um hash:
use Data::Printer:from<Perl5> kv { show_tied => 0 }
ou:
BEGIN my %opts = show_tied => 0;
use Data::Printer:from<Perl5> kv %opts;
Notas de rodapé
1 Esta resposta foi construída com base na explicação de Stefan do problema que abri em resposta ao "Alterando parâmetros no Data :: Printer in Raku" SO :
A solução é bastante simples: use Data::Printer:from<Perl5> 'show_tied', 0;
A vírgula gorda =>
é um Pair
construtor em Raku, enquanto na verdade é apenas uma vírgula sofisticada no Perl 5. Raku considera Pair
argumentos a serem usados para importar tags como :ALL
(que é equivalente a ALL => True
). Para contornar isso e passar o que o código Perl 5 espera, basta listar os valores individualmente.
Em outras palavras, essa necessidade de conversão ocorre porque Perl e Raku compartilham a noção de tags ( documento Perl sobre "tags" ; documento Raku sobre "tags" ) e (não por coincidência) usam linguisticamente a mesma sintaxe para selecionar tags ( :tagname
).
Além disso, usando Raku, essa questão de (a necessidade de resolver) ambiguidade entre se a sintaxe está sendo usada para especificar tags ou não se aplica a todos os Associative
s usados no nível superior de uma use
instrução, não apenas os escritos no formulário, :foo
mas também os escritos em outras formas, tais como foo => bar
, { foo => bar}
, %baz
, ou { %baz }
.
var
variáveis terríveis . Não parece que este pacote funcione no Raku. É uma pena, no Perl funciona maravilhosamente