我有关联数组%cart_item
,其中包含一系列关联数组。我需要访问%cart_item
中的键值。我有以下代码迭代每个数组键。 (如果价值是' meta')我会相当于php继续
my $key_value;
for (keys %cart_item) {
next if (/^meta$/ || /^\s*$/);
}
我需要做这样的事情(尽管这不是有效的),在循环中设置键的值:
my $key_value;
for $i (keys %cart_item) {
next if (/^meta$/ || /^\s*$/);
$key_value = $i;
# do stuff
}
有人可以在这提出解决方案吗?抱歉,如果这很明显,我是一个Perl新手。感谢
答案 0 :(得分:3)
我想你要求
for my $key (keys %cart_item) {
next if $key =~ /^meta$/ || $key =~ /^\s*$/;
my $val = $cart_item{$key};
...
}
答案 1 :(得分:2)
如果您只是在寻找密钥的价值,那么您可以使用each
同时获取两者:
while (my ($key, $val) = each %cart_item) {
next if $key eq 'meta' || $key =~ /^\s*$/;
...
}
这相当于PHP的foreach ($cart_item as $key => $val)
。
我也改变了" meta"检查使用简单的字符串相等;无需使用正则表达式进行完全匹配。
答案 2 :(得分:1)
您的原始代码
for ( keys %cart_item ) {
next if (/^meta$/ || /^\s*$/);
}
工作正常,因为for
没有循环控制变量,所以它默认为Perl"代词" it 变量$_
。此外,您的正则表达式模式匹配没有对象,因此它们也默认为$_
完全写完,这将是
for $_ ( keys %cart_item ) {
next if ( $_ =~ /^meta$/ || $+ =~ /^\s*$/);
}
但我们不必写所有这些。有些人讨厌它;像我这样的其他人认为它是绝对的天才
您的非工作代码
my $key_value;
for $i (keys %cart_item) {
next if (/^meta$/ || /^\s*$/);
$key_value = $i;
# do stuff
}
使用循环控制控制变量$i
(顺便说一下,散列键的名称错误)。除了你的正则表达式匹配之外,这一切都很好
my $key_value;
for $i (keys %cart_item) {
next if $i =~ /^meta$/ or $i =~ /^\s*$/;
$key_value = $i;
# do stuff
}
或者,更好的是,坚持$_
并写下这个
for ( keys %cart_item ) {
next if /^meta$/ or /^\s*$/;
my $key_value = $_;
# do stuff
}