$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
Tại phần cuối của nó $a
nên hình như:Perl: Làm thế nào để đẩy cặp khoá/giá trị lên hashref và vẫn giữ được tài liệu tham khảo
{ 'b' => { 'c' => 1, 'd' => 1, 'e' => 1 } };
Tại phần cuối của nó $b
sẽ trông giống như:
{ 'c' => 1, 'd' => 1, 'e' => 1 }
Lưu ý: nó sẽ được giống như thực hiện:
$b->{d} = 1;
$b->{e} = 1;
$b = { %$b, d=>1, e=>1 };
là không mong muốn vì nó tạo ra một bản sao của $a
và mất tài liệu tham khảo.
Vâng tôi đã nhìn vào perldata trước khi hỏi và tôi không thể tìm thấy bất kỳ điều gì cụ thể - tôi rất vui vì bạn đã có thể giải mã một cái gì đó từ nó. Thành thật mà nói, tôi ngạc nhiên '% {$ b} = (% {$ b}, d => 1, e => 1);' làm việc (nó vẫn áp dụng thay đổi cho tham chiếu '$ a') – vol7ron
bit về hashref slice đã giúp tôi nhận ra rằng '->' là không cần thiết. Với '$ _' là một hashref, tôi đã thử' @ _-> {qw (key1 key2)} 'trong đó tạo ra một thông báo lỗi khó hiểu:' Không thể sử dụng một giá trị không xác định làm tham chiếu HASH' Công việc này: '@ { $ _} {qw (key1 key2)} ' – Palec
@Palec Điều này có thể không có bất kỳ dấu hiệu nào về những gì bạn đang làm, nhưng trong ví dụ của bạn' @ _' và '@ $ _' có hai nghĩa khác nhau – vol7ron