用List::Util 和 List::MoreUtils 简化列表处理

1.快速查找最大值,最小值

use List::Util qw(max min) ;
my $max_number = max ( 0 .. 1000 );
my $min_number =  min (0 .. 1000 );

此外还有maxstr子程序能返回列表中最大的字符串,minstr子程序返回列表中最小的字符串

use List::Util qw(maxstr);
my $max_string = maxstr(qw(Fido Spot Rover));

sum子程序所有数字求和

use List::Util qw(sum);
my $sum = sum ( 1.. 1000) ;

2.列表归并

    $foo = reduce { $a < $b ? $a : $b } 1..10       # min
    $foo = reduce { $a lt $b ? $a : $b } 'aa'..'zz' # minstr
    $foo = reduce { $a + $b } 1 .. 10               # sum
    $foo = reduce { $a . $b } @bar                  # concat

3. 判断是否有元素匹配

纯粹用Perl实现的话,找出列表中的第一个符合某项条件的元素,比找出所有符合条件的要麻烦一些。

first子程序就是为了解决这样的问题而设计的,并且会告诉第一个元素是什么。一旦找到答案理解停止。

    $foo = first { defined($_) } @list    # first defined value in @list
    $foo = first { $_ > $value } @list    # first value in @list which
                                          # is greater than $value

4.一次遍历多个列表

    @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 子程序

    my $ea = each_array(@a, @b, @c);
    while ( my ($a, $b, $c) = $ea->() )   { .... }

5.数组合并

    @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
原文地址:https://www.cnblogs.com/tjxwg/p/2963178.html