Поддерживается ли синтаксис postderef для хэшей? - PullRequest
5 голосов
/ 15 апреля 2020

Допустим, у меня есть

my %foo;

Могу ли я установить ключи foo, bar, baz на a b c, взяв срез и выполнив параллельное назначение с запись postfix?

%foo->@{qw/foo bar baz/} = qw/a b c/

Я использовал этот синтаксис, и мне сказали, что он только "случайно работал". Я не вижу, чтобы это генерировало предупреждение, и я также не вижу, чтобы это было задокументировано. Это поведение поддерживается или нет?

1 Ответ

8 голосов
/ 16 апреля 2020

Левая часть -> должна быть выражением, которое возвращает ссылку. Используйте что-нибудь еще на свой страх и риск.


%foo->{a} используется для работы.

$ 5.10t/bin/perl -e'my %foo; %foo->{a} = 1; print "ok\n";'
ok

Это считается ошибкой.

$ 5.12t/bin/perl -e'my %foo; %foo->{a} = 1; print "ok\n";'
Using a hash as a reference is deprecated at -e line 1.
ok

$ 5.20t/bin/perl -e'my %foo; %foo->{a} = 1; print "ok\n";'
Using a hash as a reference is deprecated at -e line 1.
ok

$ 5.22t/bin/perl -e'my %foo; %foo->{a} = 1; print "ok\n";'
Can't use a hash as a reference at -e line 1.

Есть нет никаких оснований полагать, что %foo->@{...} является более действительным, чем %foo->{...}.


Ошибка сообщила .

...