2

私はperlを初めて使用し、ループを繰り返さずにforeachループ内の配列の次の要素にスキップする際に問題に直面しています。foreach ループを使用して配列を処理する次のケースがあるとします。

 foreach (@lines){  
     ...  
     print "$_";     #print current line  
     if (cond){      #this condition is met by one "line" in @lines  
        #goto next line;  
        $_=~s/expr/substitute_expr/g;     #substitute in the next line  
      }  
     ...
 }

perlでこれを行うことは可能ですか?ファイル ハンドラーでは、次のように <> 演算子を使用して可能です。

foreach $line (<FILE>){  
    print "$line\n";        #print this line  
    $line = <FILE>;  
    print "$line";        #print next line  
} 

これをアレイで複製できる方法はありますか。nextまたは重複配列を使用せず
にこれを行う方法はありますか

4

3 に答える 3

0

これは、すべての配列 (つまり0、 、""、およびのような値を含む配列) で機能する choroba のクロージャの回答の変更でundefあるため、より典型的な foreach ループのように実行されます。

#!/usr/bin/perl
use warnings;
use strict;

#!/usr/bin/perl
use warnings;
use strict;

sub iterator {
    my $list = shift;
    my $i = 0;
    return sub {
       if (defined $_[0] and $i > $#$list){
           return 0;
       }
       elsif (defined $_[0]){
           return 1;
       }
       else{
           return $list->[$i++];
       }
    }
}

my @list = qw/a b c d e f g h 0 1 2 3/;
my $get_next = iterator(\@list);

while ($get_next->("cycle through all array elements")) {
    my $member = $get_next->();
    print "$member\n";
    if ('d' eq $member) {
        my $next = $get_next->();
        print uc $next, "\n";
    }
}
于 2016-01-06T01:15:07.907 に答える