Если вы не видите перезаписывающего поведения, значит, вы делаете что-то не так:
#!/usr/bin/perl
use strict;
use warnings;
sub func { print "func\n" }
sub tion { print "tion\n" }
my %args = (
handler => \&tion,
);
my $dispatch = {
handler => \&func,
%args
};
$dispatch->{handler}();
С perldoc perlglossary
:
- список
Упорядоченный набор скалярных значений.
С perldoc perldata
:
Списки выполняют автоматическую интерполяцию подсписков. То есть, когда LIST оценивается, каждый элемент списка оценивается в контексте списка, и результирующее значение списка интерполируется в LIST так же, как если бы каждый отдельный элемент был членом LIST. Таким образом, массивы и хэши теряют свою идентичность в списке
и
Хеш может быть инициализирован с использованием литерального списка, содержащего пары элементов, которые должны интерпретироваться как ключ и значение.
Практический результат заключается в том, что хэш в контексте списка дает список пар ключ / значение. Когда у этого списка есть порядок (порядок, в котором он был возвращен), вам никогда не гарантируется, в каком порядке будут возвращаться ключи и значения, но списки гарантируют порядок их элементов, поэтому (a => 1, %h)
создает список, который начинается с "a"
, затем 1
, затем первый ключ, возвращаемый %h
, затем первое значение, возвращаемое %h
, и так далее. Этот список затем присваивается целевому хешу в порядке списка, что означает, что если ключ "a"
находится в %h
, то он будет переопределять оригинал.