2012-05-16 66 views
6

我要找的Perl相当于下面的PHP代码: -的Perl相当于PHP的foreach循环

foreach($array as $key => $value){ 
... 
} 

我知道我可以做一个foreach循环,如下所示: -

foreach my $array_value (@array){ 
.. 
} 

哪将使我能够处理数组值 - 但我也想使用这些键。

我知道有一个Perl哈希,它允许你设置键值对,但我只想索引号,数组自动给你。

回答

7

尝试:

my @array=(4,5,2,1); 
foreach $key (keys @array) { 
    print $key." -> ".$array[$key]."\n"; 
} 

Works的哈希和数组。 在数组的情况下,$ key包含索引。

6

我猜最接近Perl是这样的:

foreach my $key (0 .. $#array) { 
    my $value = $array[$key]; 

    # Now $key and $value contains the same as they would in the PHP example 
} 

因为Perl 5.12.0,您可以使用keys功能的阵列以及散列。这可能会更具可读性。

use 5.012; 

foreach my $key (keys @array) { 
    my $value = $array[$key]; 

    # Now $key and $value contains the same as they would in the PHP example 
} 
+0

谢谢。我的问题解决了!我真的不想对最佳答案投票,因为他们都是对的。 – fbc

+0

如果我是你,我会接受flesk的回答。 “每个”解决方案比其他任何示例都更接近PHP版本。 –

14

如果你正在使用Perl 5.12.0或以上,你可以在阵列使用each

my @array = 100 .. 103; 

while (my ($key, $value) = each @array) { 
    print "$key\t$value\n"; 
} 

输出:对所有这些问题的答案

0  100 
1  101 
2  102 
3  103 

perldoc each

+2

是的,懒惰的'while'比渴望的'foreach'更可取。 – Axeman

+0

@Axeman:这是一个很好的观点。即使性能增益在我的四元素阵列上可以忽略不计,这当然是一个值得注意的区别。 – flesk