Perl - 'next'和'continue'之间的区别?

JDS*_*JDS 20 perl loops

快速Perl问题:当经历一个循环(比如一个while循环)时,a nextcontinue命令之间有什么区别?我认为两者都跳到循环的下一次迭代.

amo*_*mon 18

continue关键字可用于一个的块循环.continue块中的代码在下一次迭代之前执行(在评估循环条件之前).它不会影响控制流.

my $i = 0;
when (1) {
  print $i, "\n";
}
continue {
  if ($i < 10) {
    $i++;
  } else {
    last;
  }
}
Run Code Online (Sandbox Code Playgroud)

几乎相当于

foreach my $i (0 .. 10){
  print $i, "\n";
}
Run Code Online (Sandbox Code Playgroud)

continue关键字的另一层含义given- when结构,Perl的switch- case.when执行一个块之后,Perl会自动执行,break因为无论如何大多数程序都会这样做.如果要落空到下一个案件continue必须使用.在这里,continue修改控制流程.

given ("abc") {
  when (/z/) {
    print qq{Found a "z"\n};
    continue;
  }
  when (/a/) {
    print qq{Found a "a"\n};
    continue;
  }
  when (/b/) {
    print qq{Found a "b"\n};
    continue;
  }
}
Run Code Online (Sandbox Code Playgroud)

会打印

Found a "a"
Found a "b"
Run Code Online (Sandbox Code Playgroud)

next关键字仅在循环中可用,并导致新的迭代,包括.重新评估循环条件.redo跳转到循环块的开头.不评估循环条件.

  • 第一个代码块中有一个错字,我怀疑您说的是while(1){..`不是`when(1){...` (2认同)