[첫화면으로]Perl/List-MoreUtils

마지막으로 [b]

1. perldoc List::MoreUtils 번역 요약
1.1. 이름
1.2. 개괄
1.3. 설명
1.4. 익스포트
1.5. 환경 변수
1.6. 버그, 지원, 감사, 카피라이트 등
1.7. 참고
2. 기타 & Comments

1. perldoc List::MoreUtils 번역 요약

원문: http://search.cpan.org/~adamk/List-MoreUtils-0.33/lib/List/MoreUtils.pm

1.1. 이름

List::MoreUtils - List::Util에 없는 기능들 제공

1.2. 개괄

    use List::MoreUtils qw{
        any all none notall true false
        firstidx first_index lastidx last_index
        insert_after insert_after_string
        apply indexes
        after after_incl before before_incl
        firstval first_value lastval last_value
        each_array each_arrayref
        pairwise natatime
        mesh zip uniq distinct minmax part
    };

1.3. 설명

자주 쓰이지만 Perldoc:List::Util1에 없는 기능들을 제공

 any BLOCK LIST

LIST 원소 중 BLOCK이 참이 되는 원소가 존재하면 참 반환. 그 외 거짓 반환
    print "At least one value undefined"
        if any { ! defined($_) } @list;

 all BLOCK LIST

모든 원소에 대해 BLOCK이 참이 되면 참. 그 외 거짓 반환.
    print "All items defined"
        if all { defined($_) } @list;

 none BLOCK LIST

BLOCK을 만족시키는 원소가 없으면 참. LIST가 비어도 참2. 그 외 거짓 반환.
    print "No value defined"
        if none { defined($_) } @list;

 notall BLOCK LIST

BLOCK을 만족시키지 않는 원소가 하나 이상 있으면 참. 그 외 또는 빈 리스트의 경우에는 거짓.
    print "Not all values defined"
        if notall { defined($_) } @list;

 true BLOCK LIST

BLOCK이 참이 되는 원소의 갯수 반환.
    printf "%i item(s) are defined", true { defined($_) } @list;

 false BLOCK LIST

BLOCK이 거짓이 되는 원소의 갯수 반환.
    printf "%i item(s) are not defined", false { defined($_) } @list;

 firstidx BLOCK LIST
 first_index BLOCK LIST

BLOCK이 참이 되는 첫번째 원소의 인덱스 반환. 그런 원소가 없으면 -1 반환.
    my @list = (1, 4, 3, 2, 4, 6);
    printf "item with index %i in list is 4", firstidx { $_ == 4 } @list;
    __END__
    item with index 1 in list is 4

 lastidx BLOCK LIST
 last_index BLOCK LIST

BLOCK이 참이 되는 마지막 원소의 인덱스 반환. 그런 원소가 없으면 -1 반환.
    my @list = (1, 4, 3, 2, 4, 6);
    printf "item with index %i in list is 4", lastidx { $_ == 4 } @list;
    __END__
    item with index 4 in list is 4

 insert_after BLOCK VALUE LIST

BLOCK이 참이 되는 첫번째 원소의 뒤에 VALUE를 삽입
    my @list = qw/This is a list/;
    insert_after { $_ eq "a" } "longer" => @list;
    print "@list";
    __END__
    This is a longer list

 insert_after_string STRING VALUE LIST

STRING과 같은 첫번째 원소 뒤에 VALUE를 삽입
    my @list = qw/This is a list/;
    insert_after_string "a", "longer" => @list;
    print "@list";
    __END__
    This is a longer list

 apply BLOCK LIST

LIST의 각 원소에 BLOCK을 적용한 후 그 결과들의 리스트를 반환
map과 유사하나, 입력 리스트의 원소를 수정하지 않음
    my @list = (1 .. 4);
    my @mult = apply { $_ *= 2 } @list;
    print "\@list = @list\n";
    print "\@mult = @mult\n";
    __END__
    @list = 1 2 3 4
    @mult = 2 4 6 8
다음 형태를 더 보기좋게 쓴 걸로 생각할 수 있다
    for (my @mult = @list) { $_ *= 2 }

 before BLOCK LIST

첫 원소부터 BLOCK이 참이 되는 원소 직전까지의 원소들의 리스트를 반환

 before_incl BLOCK LIST

첫 원소부터 BLOCK이 참이 되는 원소까지 포함하여 원소들의 리스트를 반환

 after BLOCK LIST

BLOCK이 참이 되는 원소의 직후 원소부터 나머지 원소들의 리스트를 반환.
    @x = after { $_ % 5 == 0 } (1..9);    # returns 6, 7, 8, 9

 after_incl BLOCK LIST

BLOCK이 참이 되는 원소를 포함하여 이후 나머지 원소들의 리스트를 반환.3

 indexes BLOCK LIST

BLOCK이 참이 되는 원소들의 인덱스의 리스트를 반환. grep과 유사하나 인덱스를 반환하는 게 차이.

 firstval BLOCK LIST
 first_value BLOCK LIST

BLOCK이 참이 되는 첫번째 원소를 반환. 없으면 undef 반환

 lastval BLOCK LIST
 last_value BLOCK LIST

BLOCK이 참이 되는 마지막 원소를 반환. 없으면 undef 반환

 pairwise BLOCK ARRAY1 ARRAY2

ARRAY1과 ARRAY2의 원소 쌍에 대해 BLOCK을 수행한 후 그 결과의 리스트를 반환. 두 원소는 각각 $a와 $b에 담김. 이 두 변수는 원래 원소의 별칭이기 때문에 이걸 수정하면 입력 배열 자체가 수정되는 것에 유의
    @a = (1 .. 5);
    @b = (11 .. 15);
    @x = pairwise { $a + $b } @a, @b;   # returns 12, 14, 16, 18, 20

    # mesh with pairwise
    @a = qw/a b c/;
    @b = qw/1 2 3/;
    @x = pairwise { ($a, $b) } @a, @b;  # returns a, 1, b, 2, c, 3

 each_array ARRAY1 ARRAY2 ...

ARRAY1, ARRAY2, ..., ARRAYn 의 원소들의 리스트를 반환하는 반복자(iterator)를 생성함. 이 반복자를 처음 부르면 각 배열의 첫 원소들의 리스트를 반환. 그 다음은 두번째 원소들의 리스트를 반환. 이렇게 모든 원소를 반환할 때까지 반복
    my $ea = each_array(@a, @b, @c);
    while ( my ($a, $b, $c) = $ea->() )   { .... }
모든 배열의 끝에 도달하고 나면 빈 리스트 반환
반복자의 인자로 'index'를 전달하면, 마지막으로 추출한 원소의 인덱스를 반환

 each_arrayref LIST

each_array와 같으나, 인자로 배열들이 아니라 배열의 레퍼런스들을 받음

 natatime EXPR, LIST

배열 반복자를 생성. 이 반복자는 한 번에 EXPR개의 원소를 가져옴
    my @x = ('a' .. 'g');
    my $it = natatime 3, @x;
    while (my @vals = $it->())
    {
        print "@vals\n";
    }
    __END__
    a b c
    d e f
    g

 mesh ARRAY1 ARRAY2 [ ARRAY3 ... ]
 zip ARRAY1 ARRAY2 [ ARRAY3 ... ]

각 원소의 첫번째 원소들, 두번째 원소들, 세번째 원소들... 등으로 구성된 리스트를 반환
    @x = qw/a b c d/;
    @y = qw/1 2 3 4/;
    @z = mesh @x, @y;       # returns a, 1, b, 2, c, 3, d, 4

    @a = ('x');
    @b = ('1', '2');
    @c = qw/zip zap zot/;
    @d = mesh @a, @b, @c;   # x, 1, zip, undef, 2, zap, undef, undef, zot

 uniq LIST
 distinct LIST

LIST에서 중복된 원소를 제거한 새 리스트를 반환. 원소의 순서는 원래 LIST와 동일. 스칼라 문맥에서는 LIST 내의 고유한 원소들의 갯수를 반환
    my @x = uniq 1, 1, 2, 2, 3, 5, 3, 4; # returns 1 2 3 5 4
    my $x = uniq 1, 1, 2, 2, 3, 5, 3, 4; # returns 5

 minmax LIST

LIST의 원소 중 최솟값과 최댓값을 찾아서 그 둘의 리스트를 반환

 part BLOCK LIST

BLOCK의 리턴값에 기반해서 LIST를 분할함. 분할된 배열들의 레퍼런스의 리스트를 반환.
    my $i = 0;
    my @part = part { $i++ % 2 } 1 .. 8;   # returns [1, 3, 5, 7], [2, 4, 6, 8]
원소가 없는 파티션은 undef이 반환됨
    my @part = part { 2 } 1 .. 10;          # returns undef, undef, [ 1 .. 10 ]
BLOCK의 결과가 음수가 되지 않게 주의
    my @part = part { -1 } 1 .. 10;
    __END__
    Modification of non-creatable array value attempted, subscript -1 ...
이미 파티션이 생성된 후에는 음수도 가능함4
    my @idx  = ( 0, 1, -1 );
    my $i    = 0;
    my @part = part { $idx[$i++ % 3] } 1 .. 8; # [1, 4, 7], [2, 3, 5, 6, 8]

1.4. 익스포트

기본적으로는 아무 함수도 익스포트되지 않음
    use List::MoreUtils ':all';
    use List::MoreUtils qw{ any firstidx };

1.5. 환경 변수

LIST_MOREUTILS_PP를 설정할 경우, XS버전의 구현을 사용하지 않고 순수 펄 구현을 사용한다. 테스트 또는 버그 제출을 위한 변수.

1.6. 버그, 지원, 감사, 카피라이트 등

5.6.x 버전에서 신택스 에러가 나는 문제가 있음
    # 에러
    my @x = apply { s/foo/bar/ } qw{ foo bar baz };
    # 아래와 같이 쓸 것
    my @x = apply { s/foo/bar/ } 'foo', 'bar', 'baz';
    my @x = apply { s/foo/bar/ } my @dummy = qw/foo bar baz/;

(이하 생략)

1.7. 참고

Perldoc:List::Util5

2. 기타 & Comments

이름:  
Homepage:
내용:
 


컴퓨터분류 Perl
각주:
1. 5. /List-Util
2. 모듈 버전 0.27 이전에는 빈 리스트에 대해서는 undef을 반환했었다. any,all,notall에 대해서도 유사하게 빈 리스트에 대해서도 의미에 맞게 참 또는 거짓을 반환한다. [Changes]참조
3. after와 after_block의 경우, 참이 되는 '마지막' 원소를 기준으로 하는 게 아니라 첫번째 원소를 기준으로 한다
4. 그러나 이 경우에도, 음수의 값이 결과적으로 배열 인덱스가 음수가 될 만큼 작으면 안 된다. 예를 들어 현재 파티션이 두 개고 인덱스가 0,1이라면 -1,-2까지는 허용되나 -3부터는 에러

마지막 편집일: 2013-5-20 2:25 am (변경사항 [d])
1536 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기