- updated to 0.30
OBS-URL: https://build.opensuse.org/package/show/devel:languages:perl/perl-List-MoreUtils?expand=0&rev=15
This commit is contained in:
committed by
Git OBS Bridge
parent
0952c6759b
commit
85c292f27a
@@ -1,3 +1,8 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Apr 1 11:06:39 UTC 2011 - coolo@novell.com
|
||||||
|
|
||||||
|
- updated to 0.30
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Mar 31 12:40:18 UTC 2011 - coolo@novell.com
|
Thu Mar 31 12:40:18 UTC 2011 - coolo@novell.com
|
||||||
|
|
||||||
|
@@ -40,320 +40,6 @@ slightly better performance as everything is implemented in C. The
|
|||||||
pure-Perl implementation of these functions only serves as a fallback in
|
pure-Perl implementation of these functions only serves as a fallback in
|
||||||
case the C portions of this module couldn't be compiled on this machine.
|
case the C portions of this module couldn't be compiled on this machine.
|
||||||
|
|
||||||
* any BLOCK LIST
|
|
||||||
|
|
||||||
Returns a true value if any item in LIST meets the criterion given
|
|
||||||
through BLOCK. Sets '$_' for each item in LIST in turn:
|
|
||||||
|
|
||||||
print "At least one value undefined"
|
|
||||||
if any { ! defined($_) } @list;
|
|
||||||
|
|
||||||
Returns false otherwise, or if LIST is empty.
|
|
||||||
|
|
||||||
* all BLOCK LIST
|
|
||||||
|
|
||||||
Returns a true value if all items in LIST meet the criterion given
|
|
||||||
through BLOCK. Sets '$_' for each item in LIST in turn:
|
|
||||||
|
|
||||||
print "All items defined"
|
|
||||||
if all { defined($_) } @list;
|
|
||||||
|
|
||||||
Returns false otherwise, or if LIST is empty.
|
|
||||||
|
|
||||||
* none BLOCK LIST
|
|
||||||
|
|
||||||
Logically the negation of 'any'. Returns a true value if no item in LIST
|
|
||||||
meets the criterion given through BLOCK. Sets '$_' for each item in LIST
|
|
||||||
in turn:
|
|
||||||
|
|
||||||
print "No value defined"
|
|
||||||
if none { defined($_) } @list;
|
|
||||||
|
|
||||||
Returns false otherwise, or if LIST is empty.
|
|
||||||
|
|
||||||
* notall BLOCK LIST
|
|
||||||
|
|
||||||
Logically the negation of 'all'. Returns a true value if not all items in
|
|
||||||
LIST meet the criterion given through BLOCK. Sets '$_' for each item in
|
|
||||||
LIST in turn:
|
|
||||||
|
|
||||||
print "Not all values defined"
|
|
||||||
if notall { defined($_) } @list;
|
|
||||||
|
|
||||||
Returns false otherwise, or if LIST is empty.
|
|
||||||
|
|
||||||
* true BLOCK LIST
|
|
||||||
|
|
||||||
Counts the number of elements in LIST for which the criterion in BLOCK is
|
|
||||||
true. Sets '$_' for each item in LIST in turn:
|
|
||||||
|
|
||||||
printf "%i item(s) are defined", true { defined($_) } @list;
|
|
||||||
|
|
||||||
* false BLOCK LIST
|
|
||||||
|
|
||||||
Counts the number of elements in LIST for which the criterion in BLOCK is
|
|
||||||
false. Sets '$_' for each item in LIST in turn:
|
|
||||||
|
|
||||||
printf "%i item(s) are not defined", false { defined($_) } @list;
|
|
||||||
|
|
||||||
* firstidx BLOCK LIST
|
|
||||||
|
|
||||||
* first_index BLOCK LIST
|
|
||||||
|
|
||||||
Returns the index of the first element in LIST for which the criterion in
|
|
||||||
BLOCK is true. Sets '$_' for each item in LIST in turn:
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
Returns '-1' if no such item could be found.
|
|
||||||
|
|
||||||
'first_index' is an alias for 'firstidx'.
|
|
||||||
|
|
||||||
* lastidx BLOCK LIST
|
|
||||||
|
|
||||||
* last_index BLOCK LIST
|
|
||||||
|
|
||||||
Returns the index of the last element in LIST for which the criterion in
|
|
||||||
BLOCK is true. Sets '$_' for each item in LIST in turn:
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
Returns '-1' if no such item could be found.
|
|
||||||
|
|
||||||
'last_index' is an alias for 'lastidx'.
|
|
||||||
|
|
||||||
* insert_after BLOCK VALUE LIST
|
|
||||||
|
|
||||||
Inserts VALUE after the first item in LIST for which the criterion in
|
|
||||||
BLOCK is true. Sets '$_' for each item in LIST in turn.
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
Inserts VALUE after the first item in LIST which is equal to STRING.
|
|
||||||
|
|
||||||
my @list = qw/This is a list/;
|
|
||||||
insert_after_string "a", "longer" => @list;
|
|
||||||
print "@list";
|
|
||||||
__END__
|
|
||||||
This is a longer list
|
|
||||||
|
|
||||||
* apply BLOCK LIST
|
|
||||||
|
|
||||||
Applies BLOCK to each item in LIST and returns a list of the values after
|
|
||||||
BLOCK has been applied. In scalar context, the last element is returned.
|
|
||||||
This function is similar to 'map' but will not modify the elements of the
|
|
||||||
input list:
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
Think of it as syntactic sugar for
|
|
||||||
|
|
||||||
for (my @mult = @list) { $_ *= 2 }
|
|
||||||
|
|
||||||
* before BLOCK LIST
|
|
||||||
|
|
||||||
Returns a list of values of LIST upto (and not including) the point where
|
|
||||||
BLOCK returns a true value. Sets '$_' for each element in LIST in turn.
|
|
||||||
|
|
||||||
* before_incl BLOCK LIST
|
|
||||||
|
|
||||||
Same as 'before' but also includes the element for which BLOCK is true.
|
|
||||||
|
|
||||||
* after BLOCK LIST
|
|
||||||
|
|
||||||
Returns a list of the values of LIST after (and not including) the point
|
|
||||||
where BLOCK returns a true value. Sets '$_' for each element in LIST in
|
|
||||||
turn.
|
|
||||||
|
|
||||||
@x = after { $_ % 5 == 0 } (1..9); # returns 6, 7, 8, 9
|
|
||||||
|
|
||||||
* after_incl BLOCK LIST
|
|
||||||
|
|
||||||
Same as 'after' but also inclues the element for which BLOCK is true.
|
|
||||||
|
|
||||||
* indexes BLOCK LIST
|
|
||||||
|
|
||||||
Evaluates BLOCK for each element in LIST (assigned to '$_') and returns a
|
|
||||||
list of the indices of those elements for which BLOCK returned a true
|
|
||||||
value. This is just like 'grep' only that it returns indices instead of
|
|
||||||
values:
|
|
||||||
|
|
||||||
@x = indexes { $_ % 2 == 0 } (1..10); # returns 1, 3, 5, 7, 9
|
|
||||||
|
|
||||||
* firstval BLOCK LIST
|
|
||||||
|
|
||||||
* first_value BLOCK LIST
|
|
||||||
|
|
||||||
Returns the first element in LIST for which BLOCK evaluates to true. Each
|
|
||||||
element of LIST is set to '$_' in turn. Returns 'undef' if no such
|
|
||||||
element has been found.
|
|
||||||
|
|
||||||
'first_val' is an alias for 'firstval'.
|
|
||||||
|
|
||||||
* lastval BLOCK LIST
|
|
||||||
|
|
||||||
* last_value BLOCK LIST
|
|
||||||
|
|
||||||
Returns the last value in LIST for which BLOCK evaluates to true. Each
|
|
||||||
element of LIST is set to '$_' in turn. Returns 'undef' if no such
|
|
||||||
element has been found.
|
|
||||||
|
|
||||||
'last_val' is an alias for 'lastval'.
|
|
||||||
|
|
||||||
* pairwise BLOCK ARRAY1 ARRAY2
|
|
||||||
|
|
||||||
Evaluates BLOCK for each pair of elements in ARRAY1 and ARRAY2 and
|
|
||||||
returns a new list consisting of BLOCK's return values. The two elements
|
|
||||||
are set to '$a' and '$b'. Note that those two are aliases to the original
|
|
||||||
value so changing them will modify the input arrays.
|
|
||||||
|
|
||||||
@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 ...
|
|
||||||
|
|
||||||
Creates an array iterator to return the elements of the list of arrays
|
|
||||||
ARRAY1, ARRAY2 throughout ARRAYn in turn. That is, the first time it is
|
|
||||||
called, it returns the first element of each array. The next time, it
|
|
||||||
returns the second elements. And so on, until all elements are exhausted.
|
|
||||||
|
|
||||||
This is useful for looping over more than one array at once:
|
|
||||||
|
|
||||||
my $ea = each_array(@a, @b, @c);
|
|
||||||
while ( my ($a, $b, $c) = $ea->() ) { .... }
|
|
||||||
|
|
||||||
The iterator returns the empty list when it reached the end of all
|
|
||||||
arrays.
|
|
||||||
|
|
||||||
If the iterator is passed an argument of ''index'', then it retuns the
|
|
||||||
index of the last fetched set of values, as a scalar.
|
|
||||||
|
|
||||||
* each_arrayref LIST
|
|
||||||
|
|
||||||
Like each_array, but the arguments are references to arrays, not the
|
|
||||||
plain arrays.
|
|
||||||
|
|
||||||
* natatime BLOCK LIST
|
|
||||||
|
|
||||||
Creates an array iterator, for looping over an array in chunks of '$n'
|
|
||||||
items at a time. (n at a time, get it?). An example is probably a better
|
|
||||||
explanation than I could give in words.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
my @x = ('a' .. 'g');
|
|
||||||
my $it = natatime 3, @x;
|
|
||||||
while (my @vals = $it->())
|
|
||||||
{
|
|
||||||
print "@vals\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
This prints
|
|
||||||
|
|
||||||
a b c
|
|
||||||
d e f
|
|
||||||
g
|
|
||||||
|
|
||||||
* mesh ARRAY1 ARRAY2 [ ARRAY3 ... ]
|
|
||||||
|
|
||||||
* zip ARRAY1 ARRAY2 [ ARRAY3 ... ]
|
|
||||||
|
|
||||||
Returns a list consisting of the first elements of each array, then the
|
|
||||||
second, then the third, etc, until all arrays are exhausted.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
@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
|
|
||||||
|
|
||||||
'zip' is an alias for 'mesh'.
|
|
||||||
|
|
||||||
* uniq LIST
|
|
||||||
|
|
||||||
* distinct LIST
|
|
||||||
|
|
||||||
Returns a new list by stripping duplicate values in LIST. The order of
|
|
||||||
elements in the returned list is the same as in LIST. In scalar context,
|
|
||||||
returns the number of unique elements in 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
|
|
||||||
|
|
||||||
Calculates the minimum and maximum of LIST and returns a two element list
|
|
||||||
with the first element being the minimum and the second the maximum.
|
|
||||||
Returns the empty list if LIST was empty.
|
|
||||||
|
|
||||||
The 'minmax' algorithm differs from a naive iteration over the list where
|
|
||||||
each element is compared to two values being the so far calculated min
|
|
||||||
and max value in that it only requires 3n/2 - 2 comparisons. Thus it is
|
|
||||||
the most efficient possible algorithm.
|
|
||||||
|
|
||||||
However, the Perl implementation of it has some overhead simply due to
|
|
||||||
the fact that there are more lines of Perl code involved. Therefore, LIST
|
|
||||||
needs to be fairly big in order for 'minmax' to win over a naive
|
|
||||||
implementation. This limitation does not apply to the XS version.
|
|
||||||
|
|
||||||
* part BLOCK LIST
|
|
||||||
|
|
||||||
Partitions LIST based on the return value of BLOCK which denotes into
|
|
||||||
which partition the current value is put.
|
|
||||||
|
|
||||||
Returns a list of the partitions thusly created. Each partition created
|
|
||||||
is a reference to an array.
|
|
||||||
|
|
||||||
my $i = 0;
|
|
||||||
my @part = part { $i++ % 2 } 1 .. 8; # returns [1, 3, 5, 7], [2, 4, 6, 8]
|
|
||||||
|
|
||||||
You can have a sparse list of partitions as well where non-set partitions
|
|
||||||
will be undef:
|
|
||||||
|
|
||||||
my @part = part { 2 } 1 .. 10; # returns undef, undef, [ 1 .. 10 ]
|
|
||||||
|
|
||||||
Be careful with negative values, though:
|
|
||||||
|
|
||||||
my @part = part { -1 } 1 .. 10;
|
|
||||||
__END__
|
|
||||||
Modification of non-creatable array value attempted, subscript -1 ...
|
|
||||||
|
|
||||||
Negative values are only ok when they refer to a partition previously
|
|
||||||
created:
|
|
||||||
|
|
||||||
my @idx = ( 0, 1, -1 );
|
|
||||||
my $i = 0;
|
|
||||||
my @part = part { $idx[$++ % 3] } 1 .. 8; # [1, 4, 7], [2, 3, 5, 6, 8]
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{cpan_name}-%{version}
|
%setup -q -n %{cpan_name}-%{version}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user