A resposta a uma solicitação HTTP é uma string como
'one=iwejdoewde&two=ijijjiiij&three=&four=endinghere'
Quero colocar essa consulta em um hash. Minha solução é
my $s = 'one=iwejdoewde&two=ijijjiiij&three=&four=endinghere';
my %h = $s.comb(/<-[&]>+/).map({ my @a = .split(/\=/); @a[0] => @a[1] }) ;
say %h;
#
# {four => endinghere, one => iwejdoewde, three => , two => ijijjiiij}
#
Acho que o $s
to %h
está feio. No entanto, ele lida com o three=
segmento sem quebrar.
Parece que deveria haver uma maneira melhor, particularmente criando um par a partir dos resultados do split
.
Isso parece funcionar para um par individual:
my $s='one=two';
say $s.match( / (.+) \= (.*) / ).pairup
mas colocá-lo dentro .map
leva a um resultado inesperado
my $s = 'one=iwejdoewde&two=ijijjiiij&three=&four=endinghere';
my %h = $s.comb(/<-[&]>+/).map( *.match(/ (.+) \= (.*) /).pairup )
say %h;
#
# {one iwejdoewde => (「two」 => 「ijijjiiij」), three => (「four」 => 「endinghere」)}
#