-
- 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
List::MoreUtils - List::Util에 없는 기능들 제공
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
};
자주 쓰이지만 List::Util에 없는 기능들을 제공
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가 비어도 참. 그 외 거짓 반환.
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);
after_incl BLOCK LIST
- BLOCK이 참이 되는 원소를 포함하여 이후 나머지 원소들의 리스트를 반환.
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;
@a = qw/a b c/;
@b = qw/1 2 3/;
@x = pairwise { ($a, $b) } @a, @b;
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;
@a = ('x');
@b = ('1', '2');
@c = qw/zip zap zot/;
@d = mesh @a, @b, @c;
uniq LIST
distinct LIST
- LIST에서 중복된 원소를 제거한 새 리스트를 반환. 원소의 순서는 원래 LIST와 동일. 스칼라 문맥에서는 LIST 내의 고유한 원소들의 갯수를 반환
my @x = uniq 1, 1, 2, 2, 3, 5, 3, 4;
my $x = uniq 1, 1, 2, 2, 3, 5, 3, 4;
minmax LIST
- LIST의 원소 중 최솟값과 최댓값을 찾아서 그 둘의 리스트를 반환
part BLOCK LIST
- BLOCK의 리턴값에 기반해서 LIST를 분할함. 분할된 배열들의 레퍼런스의 리스트를 반환.
my $i = 0;
my @part = part { $i++ % 2 } 1 .. 8;
- 원소가 없는 파티션은 undef이 반환됨
my @part = part { 2 } 1 .. 10;
- BLOCK의 결과가 음수가 되지 않게 주의
my @part = part { -1 } 1 .. 10;
__END__
Modification of non-creatable array value attempted, subscript -1 ...
- 이미 파티션이 생성된 후에는 음수도 가능함
my @idx = ( 0, 1, -1 );
my $i = 0;
my @part = part { $idx[$i++ % 3] } 1 .. 8;
기본적으로는 아무 함수도 익스포트되지 않음
use List::MoreUtils ':all';
use List::MoreUtils qw{ any firstidx };
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/;
(이하 생략)
List::Util
2. 기타 & Comments
컴퓨터분류 Perl