$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
Pod koniec tego $a
powinna wyglądać następująco:Perl: Jak wcisnąć klawisz/pary wartości na hashref i nadal zachowują Reference
{ 'b' => { 'c' => 1, 'd' => 1, 'e' => 1 } };
Pod koniec tego $b
powinien wyglądać następująco:
{ 'c' => 1, 'd' => 1, 'e' => 1 }
Uwaga: byłoby takie samo, jak robi:
$b->{d} = 1;
$b->{e} = 1;
$b = { %$b, d=>1, e=>1 };
nie jest pożądane, ponieważ tworzy kopię $a
i traci odniesienie.
Tak, przed pytaniem spojrzałem na perldatę i nie mogłem znaleźć nic konkretnego - cieszę się, że udało ci się coś z tego odczytać. Szczerze mówiąc, jestem zaskoczony '% {$ b} = (% {$ b}, d => 1, e => 1);' pracował (że nadal stosował zmiany do odnośnika '$ a') – vol7ron
Bit o plasterku hashrefa pomogło mi zrozumieć, że '->' nie jest potrzebne. Ponieważ '$ _' jest hashrefem, próbowałem' @ _-> {qw (key1 key2)} ', który generuje tajemniczy komunikat o błędzie:' Nie można użyć niezdefiniowanej wartości jako odwołania HASH' Działa to: '@ { $ _} {qw (key1 key2)} ' – Palec
@Palec To może nie mieć żadnego wpływu na to, co robiłeś, ale w twoich przykładach' @ _' i '@ $ _' mają dwa różne znaczenia: – vol7ron