perl中的foreach循环如何与perl中的数组一起工作

perl中的foreach循环如何与perl中的数组一起工作,perl,Perl,此程序应执行三次,但仅执行两次。 有人能解释一下这个foreach循环在perl中是如何工作的吗 #!/usr/bin/perl use strict; use warnings; my @arr=("sandeepr", "vijay","vikas"); for my $i( @arr) { print @arr; my $b=pop(@arr); print "\n $b"; } : 如果列表的任何部分是数组,foreach如果在循环体中添加或删除元素,例如使用s

此程序应执行三次,但仅执行两次。 有人能解释一下这个foreach循环在perl中是如何工作的吗

#!/usr/bin/perl
use strict;
use warnings;
my @arr=("sandeepr", "vijay","vikas");
for my $i( @arr)
{
    print @arr;
    my $b=pop(@arr);
    print "\n $b";
}
:

如果列表的任何部分是数组,
foreach
如果在循环体中添加或删除元素,例如使用
splice
,将非常混乱。所以不要那样做

尽管这让Perl感到困惑,但您似乎更加困惑。你想做什么?按相反的顺序打印元素?如果是这样,你可以使用

for my $ele (reverse @arr) {
   print("$ele\n");
}

:

如果列表的任何部分是数组,
foreach
如果在循环体中添加或删除元素,例如使用
splice
,将非常混乱。所以不要那样做

尽管这让Perl感到困惑,但您似乎更加困惑。你想做什么?按相反的顺序打印元素?如果是这样,你可以使用

for my $ele (reverse @arr) {
   print("$ele\n");
}


您正在迭代一个数组,因此您应该只打印$i;您还修改了正在迭代的数组,这通常是一个坏主意,可能会导致意外的结果。最好复制要操作的数组。此外,一般来说,1个字母的变量不是一个好主意,但在perl中,变量
$a
$b
有特殊用途,请参阅perldoc-f sortif如果要打印数组3次,可以:
对于(1..3){print@arr;}
您正在迭代的数组,因此,您应该只打印$i;您还修改了正在迭代的数组,这通常是一个坏主意,可能会导致意外的结果。最好复制要操作的数组。此外,一般来说,单字母变量不是一个好主意,但在perl中,变量
$a
$b
有特殊用途,请参阅perldoc-f sortif如果要打印数组3次,可以:
for(1..3){print@arr;}
感谢ikegami的回复。是的,你是对的,我正试图以相反的顺序打印数组(但没有使用内置的反转功能)@rawatsandeep1989不使用内置的功能来满足你的需要有什么目的?只是为了了解它是如何工作的还是其他什么?@patrick Mevzek,是的,只是为了了解它是如何工作的。:-)如果没有内置的,那是个愚蠢的前提。如果没有操作员,你就什么都做不了。如果您特别提到命名运算符,则只能编写除了运行时错误之外无法生成任何输出的程序。(没用)谢谢池上的回复。是的,你是对的,我正试图以相反的顺序打印数组(但没有使用内置的反转功能)@rawatsandeep1989不使用内置的功能来满足你的需要有什么目的?只是为了了解它是如何工作的还是其他什么?@patrick Mevzek,是的,只是为了了解它是如何工作的。:-)如果没有内置的,那是个愚蠢的前提。如果没有操作员,你就什么都做不了。如果您特别提到命名运算符,则只能编写除了运行时错误之外无法生成任何输出的程序。(没有用。)
while (@arr) {
   my $ele = pop(@arr);
   print("$ele\n");
}