Perl의 each 방법

4389 단어 Perl
each 함수는 한 번에 키/수치를 맞추는 방식으로 산열을 반복합니다.
산열 내부에서, 그것은 무작위로 보이는 순서로 자신의 기록을 유지한다.이 서열을 두루 훑어볼 수 있는 것은 모든 산열이 지난번에 되돌아온 기록이 무엇인지 기억하기 때문이다.이 서열의 실제 순서는 장래의 Perl 버전에서 바뀔 수 있지만, 한 가지 확실한 것은 keys(또는values) 함수가 같은 (수정되지 않은) 산열에서 생성되는 순서가 같다는 것이다.모든 산열은 이 프로그램의 모든 each,keys,values 함수와 호출되어 공유됩니다.이 캐리어는 산열에서 모든 요소를 읽어서 리셋하거나,keys%hash나values%hash를 계산해서 리셋할 수 있습니다.만약 산열을 반복하는 과정에서 원소를 삭제했다면, 결과는 아직 좋은 정의가 없다. 기록은 무시될 수도 있고 중복될 수도 있다.
각 함수는 매번 한 쌍의 키 값만 되돌려주고 전체 목록을 되돌려주지 않기 때문에 지난번의 접근 위치를 기록해야 합니다.라우터의 위치에 대한 기록은 다음 예제를 참조하십시오.
    #!/usr/bin/perl -w
    ##############################
    use strict;
    my %hash = ( 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6,);
    while(my ($k, $v) = each(%hash)){
        print "$k  =>  $v
"; last if($k eq "3"); } print "----------------------
"; while(my ($k, $v) = each(%hash)){ print "$k => $v
"; }

실행 코드, 출력은 다음과 같습니다.
    $ ./test.pl 
    6  =>  6
    4  =>  4
    1  =>  1
    3  =>  3
    ----------------------
    2  =>  2
    5  =>  5

분명히 each 함수의 내부 트랙터는 지난번 트랙터의 위치를 기록하고 두 번째 트랙터는 이전의 위치에서 시작한다.
만약 처음으로 해시 끝부분을 훑어보았다면 다음부터는 첫 번째 부분부터 훑어보았을 것이다.
    #!/usr/bin/perl -w
    ##############################
    use strict;
    my %hash = ( 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6,);
    while(my ($k, $v) = each(%hash)){
        print "$k  =>  $v
"; } print "----------------------
"; while(my ($k, $v) = each(%hash)){ print "$k => $v
"; }

출력은 다음과 같습니다.
    $ ./test.pl 
    6  =>  6
    4  =>  4
    1  =>  1
    3  =>  3
    2  =>  2
    5  =>  5
    ----------------------
    6  =>  6
    4  =>  4
    1  =>  1
    3  =>  3
    2  =>  2
    5  =>  5

처음 훑어보는 것이 끝에 도착하지 않았지만, 키스를 사용하여 훑어보는 것을 리셋하면 다음에도 처음부터 훑어봅니다.
    #!/usr/bin/perl -w
    ##############################
    use strict;
    my %hash = ( 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6,);
    while(my ($k, $v) = each(%hash)){
        print "$k  =>  $v
"; last if($k eq "3"); } print "----------------------
"; keys %hash; while(my ($k, $v) = each(%hash)){ print "$k => $v
"; }

출력:
    $ ./test.pl 
    6  =>  6
    4  =>  4
    1  =>  1
    3  =>  3
    ----------------------
    6  =>  6
    4  =>  4
    1  =>  1
    3  =>  3
    2  =>  2
    5  =>  5

이 트랙터는 변수나 인용 이름이 아닌 해시 자체의 트랙 위치를 기록합니다. 예를 들어
    #!/usr/bin/perl -w
    ##############################
    use strict;
    my %hash2 = ( x => { 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, });
    while(my ($K, $V) = each(%hash2)){
        while(my ($k, $v) = each(%$V)){
            print "$k  =>  $v
"; last if($k eq "3"); } } print "----------------------
"; while(my ($K, $V) = each(%hash2)){ while(my ($k, $v) = each(%$V)){ print "$k => $v
"; } }

출력은 다음과 같습니다.
    $ ./test.pl 
    6  =>  6
    4  =>  4
    1  =>  1
    3  =>  3
    ----------------------
    2  =>  2
    5  =>  5

분명히 이곳의 2급 자해시를 훑어볼 때 임시 변수를 사용했지만, Perl은 변수의 접근 위치를 기록했다.
그리고 Perl의 내부 캐리어는 변수 이름처럼 블록 역할 영역에서만 적용되는 것이 아니라 전역적으로 적용됩니다.
    #!/usr/bin/perl -w
    ##############################
    use strict;
    my %hash = ( 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6,);
    if(1){
        while(my ($k, $v) = each(%hash)){
            print "$k  =>  $v
"; last if($k eq "3"); } } print "----------------------
"; while(my ($k, $v) = each(%hash)){ print "$k => $v
"; }

출력:
    $ ./test.pl 
    6  =>  6
    4  =>  4
    1  =>  1
    3  =>  3
    ----------------------
    2  =>  2
    5  =>  5

분명히 첫 번째 반복은 블록 작용역을 사용했지만 두 번째 반복의 결과에 영향을 미쳤다.

좋은 웹페이지 즐겨찾기