$a = {b=>{c=>1}}; # set up ref
$b = $a->{b}; # ref the ref
$b .= (d=>1,e=>1); # where we want to assign multiple key/val at once
Al final de la misma $a
debe verse como:Perl: cómo empujar clave/valor par en hashref y aún conservan referencia
{ 'b' => { 'c' => 1, 'd' => 1, 'e' => 1 } };
Al final de la misma $b
debería verse como:
{ 'c' => 1, 'd' => 1, 'e' => 1 }
Nota: sería lo mismo que hacer:
$b->{d} = 1;
$b->{e} = 1;
$b = { %$b, d=>1, e=>1 };
no se desea, ya que crea una copia de $a
y pierde la referencia.
Sí, miré perldata antes de preguntar y no pude encontrar nada específico. Me alegro de que haya podido descifrar algo de él. Francamente, estoy sorprendido '% {$ b} = (% {$ b}, d => 1, e => 1);' trabajado (que todavía aplica cambios a la referencia '$ a') – vol7ron
El bit sobre la rebanada de hashref me ayudó a darme cuenta de que '->' no es necesario. Con '$ _' siendo un hashref, probé' @ _-> {qw (key1 key2)} 'que produce un mensaje de error críptico:' No se puede usar un valor indefinido como referencia HASH' Esto funciona: '@ { $ _} {qw (clave1 clave2)} ' – Palec
@Palec Esto puede no tener ninguna relación con lo que estaba haciendo, pero en sus ejemplos' @ _' y '@ $ _' tienen dos significados diferentes – vol7ron