假设我有
my %foo;
我可以通过使用切片并使用后置表达式的方式,将键
foo
、bar
和 baz
设置为 a
、b
和 c
吗?%foo->@{qw/foo bar baz/} = qw/a b c/
我使用了这个语法,但有人告诉我它只是“意外地工作”。我没有看到它生成警告,并且我也没有在任何地方看到有关它的文档。这种行为是否得到支持?
假设我有
my %foo;
foo
、bar
和 baz
设置为 a
、b
和 c
吗?%foo->@{qw/foo bar baz/} = qw/a b c/
->
的左侧应该是一个返回引用的表达式,使用其他任何东西都有风险。
%foo->{a}
曾经有效。
$ 5.10t/bin/perl -e'my %foo; %foo->{a} = 1; print "ok\n";'
ok
这被认为是一个bug。
$ 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->{...}
更有效。
已经报告了错误 .
LEFT->@{RIGHT}
=@{LEFT}{RIGHT}
的期望 - 前后缀取值将尝试将%foo
转换为字符串,当其被替换到该模式中时。请使用普通的@foo{...}
切片。 - amon@foo{qw/foo bar baz/} = qw/a b c/;
或者在引用的情况下@{$fooref}{qw/foo bar baz/}=qw/a b c/
。后缀语法对我来说很新,我无法评论它的使用。 - Polar Bear->
的左侧应该是返回引用的表达式。 - ikegami无法将数组用作引用...
- zdim