Perl 如何将foreach与哈希引用一起使用?
我有这个密码Perl 如何将foreach与哈希引用一起使用?,perl,hash,Perl,Hash,我有这个密码 foreach my $key (keys %ad_grp) { # Do something } 这很有效 如果我没有%ad\u grp,但是有一个对散列的引用,$ad\u grp\u ref,那么这会是什么样子 foreach my $key (keys %$ad_grp_ref) { ... } Perl::Critic和daxim推荐这种风格 foreach my $key (keys %{ $ad_grp_ref }) { ... } 出于
foreach my $key (keys %ad_grp) {
# Do something
}
这很有效
如果我没有%ad\u grp
,但是有一个对散列的引用,$ad\u grp\u ref
,那么这会是什么样子
foreach my $key (keys %$ad_grp_ref) {
...
}
Perl::Critic
和daxim推荐这种风格
foreach my $key (keys %{ $ad_grp_ref }) {
...
}
出于对可读性和维护的考虑(这样当您需要使用
%{$ad\u grp\u obj[3]->get\u ref()}
而不是%{$ad\u grp\u ref}
时,您就不必费劲地考虑要更改什么了)正如其他人所说的,您必须取消引用。键
函数要求其参数以%开头:
我喜欢:
foreach my $key (keys %{$ad_grp_ref}) {
根据:
猜猜你该听谁的
你可能想通读这本书
如果你发现自己做了很多关于散列、列表散列和散列列表的引用,你可能想开始考虑使用。在Perl文档中有。在Perl 5.14中(它现在在Perl 5.13中工作),我们可以
因此,对于Perl 5.20,新的答案是:
foreach my $key (keys $ad_grp_ref->%*) {
(其优点是可以透明地处理更复杂的表达式:
foreach my $key (keys $ad_grp_obj[3]->get_ref()->%*) {
)
有关完整文档,请参阅
注意:在Perl版本5.20和5.22中,这种语法被认为是实验性的,因此您需要
use feature 'postderef';
no warnings 'experimental::postderef';
在使用它的任何文件的顶部。Perl 5.24及更高版本不需要任何pragmas来实现此功能。如果您教授更好的样式,您会从我这里得到更多的支持:这不是更好,那更糟。另外,可能非常有用我完全同意ysth,没有理由让表达式变得比需要的更复杂。
keys%$ad_grp_ref
更可读,尤其是当被其他环绕运算符包围时。正如你所看到的,Sandra,有不止一种方法可以做到这一点。您需要使用5.14.0
或类似的工具,以确保您的脚本不会尝试在太旧的Perl版本上运行,而无法使用这种语法(当然也可以使用任何5.13.X版本)。很好,我应该在代码示例中说明这一点。修改。标量上的实验键现在被禁止
。此功能已在5.22中删除。(ish)可能的副本
foreach my $key (keys $ad_grp_obj[3]->get_ref()->%*) {
use feature 'postderef';
no warnings 'experimental::postderef';