Perl List::Util 모듈 사용 인스턴스

5386 단어 PerlListUtil모듈
Perl에는 목록 데이터 처리에 전문적으로 사용되는 모듈이 있습니다. 예를 들어List:::Util 모듈은 표준 라이브러리에 포함되어 있으며 다양한 효율적인 흔한 목록 처리 도구를 제공할 수 있습니다.C 언어로 이루어지기 때문에, 속도는 일반적으로 매우 빠르다!
[예01] 조건에 맞는 목록을 스캔하고 첫 번째 조건에 맞는
일반적인 방법:

use 5.010; 
my @names  = qw(Wendy Jerry Betty Wendy Alice); 
foreach  (@names) { 
    if (/\bWendy\b/i) { 
        $match = $_; 
        last; 
    } 

say $match;     
List::Util 모듈에서 제공하는first 서브루틴을 사용하면 간단하게

use List::Util qw(first); 
my $match = first {/\bWendy\b/i} @names;  # Wendy  

[예02] 1에서 1000 사이의 합을 구하다
일반적인 방법:

use 5.010; 
my $total = 0; 
foreach (1..1000) { 
    $total += $_; 

say $total;               # 500500 
List::Util 모듈에서 제공하는 sum 서브루틴을 사용하면 간단합니다.

use List::Util qw(sum); 
my $total = sum(1..1000); # 500500 
【예03】 한 조의 숫자의 최대치와 최소치를 구한다.
일반적인 방법:

#! /usr/bin/perl;   
use utf8;   
   
sub max {   
   my($max_so_far) = shift @_; # , 。   
   foreach(@_){                # @_   
   if($_>$max_so_far){         # $max_so_far 。   
    $max_so_far = $_;}         # ,    
   }   
   $max_so_far;   
}   
   
my $_MaxData = &max(2,3,8,5,10);   
print $_MaxData;               # 10 
List::Util 모듈에서 제공하는 max 서브루틴을 사용하면 간단합니다.

use List::Util qw(max); 
my $max = max(2, 3, 8, 5, 10); 
print $max;                 # 10 
마찬가지로 List::Util 모듈에서 제공하는 min 서브루틴을 사용하여 최소값을 구할 수 있습니다.

use List::Util qw(min); 
my $min = min(2, 3, 8, 5, 10);  # 2 
[예04] 문자열 그룹 정렬
일반적인 방법을 사용한다면 순서대로 하나씩 비교해야 합니다. List:::Util의 maxstr 하위 프로그램으로 쉽게 할 수 있습니다.

use List::Util qw(maxstr); 
my  $max_str = maxstr( qw/Jerry Betty Alice Fred Barney jerry/ ); 
print $max_str; 
【예05】 목록의 요소에 대한 무작위 정렬
일반적인 방법을 사용하면 실현하기 어려운데,List:::Util의 shuffle 서브루틴을 사용하면 매우 간단합니다. 명령 하나로 처리합니다!

use List::Util qw(shuffle); 
my @shuffled_nums = shuffle(1..10);   # 3 9 8 5 6 4 1 10 2 7                 
my @shuffled_name = shuffle('A'..'G');# F E G A B D  
[예06] 목록에 어떤 원소가 없거나 어떤 원소가 있거나 모든 원소가 조건에 부합되는지 검사한다.유사grep 문법 지원
일반적인 방법을 사용하면 실현하기 어렵고, List::MoreUtils 역시 실현하기 쉬우며, 코드는 다음과 같다.

use List::MoreUtils qw(none any all); 
my @numbers = qw(7 4 1 3 78); 
if (none {$_ > 100} @numbers) {print "No elements over 100
"; }  
elsif (any {$_ > 50}@numbers) {print "Some elements over 50
";} 
elsif (all {$_ <10} @numbers) {print "All elements < 10
";} 
NOTE: List::MoreUtils , .
[예07] 여러 개의 이름 목록을 동시에 처리하고 매번 두 자리를 꺼냅니다.

use List::MoreUtils qw(natatime);  
my @names_1 = qw(Alice Bob Carly); 
my @names_2 = qw(David Edward Foo); 
my $names   = natatime(2, @names_1, @names_2);  #natatim (N at a time: N )  
while (my @name = $names->()) {                 # ,  
    print "Got @name
"; 

#  
Got Alice Bob 
Got Carly David 
Got Edward Foo 
[예08] 여러 개의 목록을 하나의 목록으로 합치다

use List::MoreUtils qw(mesh); 
my @array_1 = 'A' .. 'D'; 
my @array_2 = 1 .. 4; 
my @array_3 = qw( jerry alice wendy ); 
my @array_new = mesh(@array_1, @array_2, @array_3); 
print @array_new; 
# : 
A=>1=>jerry=> B=>2=>alice=> C=>3=>wendy=> D=>4
1회: 첫 번째 목록에서 A, 두 번째 목록에서 1, 세 번째 목록에서 jerry 꺼내기
두 번째: 첫 번째 목록에서 B, 두 번째 목록에서 2, 세 번째 목록에서 앨리스 꺼내기
......
순서대로 유추하라!
[예09] 지정된 문자열에 문자 넣기
List::MoreUtils 의 insert_after 서브루틴

use v5.10; 
use List::MoreUtils qw(:all); 
 
my @list = qw/This is a list/; 
insert_after {$_ eq 'a'} "longer" => @list; 
print @list;  #This is a longer list
[예10] 두 개의 목록을 조작한다. 첫 번째 목록은 제곱 다음에 두 번째 목록과 화해를 구한다.
List::MoreUtils의 pairwise 서브루틴 사용 가능

use v5.10; 
use List::MoreUtils qw(:all); 
 
@m = (1..4); 
@n = (100..103); 
@x = pairwise { ($a*$a) + $b } @m, @n;  #101 105 111 119 
[요약]
만약에 위의 방식이 일반적인 방법으로 실현된다면 여러 번 반복해서 반복해야 하기 때문에 매우 번거롭다. 복잡한 알고리즘, 데이터 구조를 C로 실현하고 List 모듈에 봉인하면 복잡해 보이는 많은 기능을 실현할 수 있다. 그 중에서 Perl의 강력한 점은 CPAN이고 많은 모듈이 지탱하고 있다는 것을 알 수 있다.

좋은 웹페이지 즐겨찾기