diff options
author | Siep Kroonenberg <siepo@cybercomm.nl> | 2011-02-17 17:57:31 +0000 |
---|---|---|
committer | Siep Kroonenberg <siepo@cybercomm.nl> | 2011-02-17 17:57:31 +0000 |
commit | 320d8694fec25ed148613684543b5a0504a046ae (patch) | |
tree | 0ddcf933d3acd3c98a387fa2bf73d0554ca6e50d /Master/tlpkg/tlperl/lib/List/Util | |
parent | 779e71f16ca01a6244b632b95bdb461fec163b34 (diff) |
New tlperl part XIV
git-svn-id: svn://tug.org/texlive/trunk@21436 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlperl/lib/List/Util')
-rw-r--r-- | Master/tlpkg/tlperl/lib/List/Util/PP.pm | 83 | ||||
-rw-r--r-- | Master/tlpkg/tlperl/lib/List/Util/XS.pm | 45 |
2 files changed, 128 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/List/Util/PP.pm b/Master/tlpkg/tlperl/lib/List/Util/PP.pm new file mode 100644 index 00000000000..425f1c50159 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/List/Util/PP.pm @@ -0,0 +1,83 @@ +# List::Util::PP.pm +# +# Copyright (c) 1997-2009 Graham Barr <gbarr@pobox.com>. All rights reserved. +# This program is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. + +package List::Util::PP; + +use strict; +use warnings; +use vars qw(@ISA @EXPORT $VERSION $a $b); +require Exporter; + +@ISA = qw(Exporter); +@EXPORT = qw(first min max minstr maxstr reduce sum shuffle); +$VERSION = "1.22"; +$VERSION = eval $VERSION; + +sub reduce (&@) { + my $code = shift; + require Scalar::Util; + my $type = Scalar::Util::reftype($code); + unless($type and $type eq 'CODE') { + require Carp; + Carp::croak("Not a subroutine reference"); + } + no strict 'refs'; + + return shift unless @_ > 1; + + use vars qw($a $b); + + my $caller = caller; + local(*{$caller."::a"}) = \my $a; + local(*{$caller."::b"}) = \my $b; + + $a = shift; + foreach (@_) { + $b = $_; + $a = &{$code}(); + } + + $a; +} + +sub first (&@) { + my $code = shift; + require Scalar::Util; + my $type = Scalar::Util::reftype($code); + unless($type and $type eq 'CODE') { + require Carp; + Carp::croak("Not a subroutine reference"); + } + + foreach (@_) { + return $_ if &{$code}(); + } + + undef; +} + + +sub sum (@) { reduce { $a + $b } @_ } + +sub min (@) { reduce { $a < $b ? $a : $b } @_ } + +sub max (@) { reduce { $a > $b ? $a : $b } @_ } + +sub minstr (@) { reduce { $a lt $b ? $a : $b } @_ } + +sub maxstr (@) { reduce { $a gt $b ? $a : $b } @_ } + +sub shuffle (@) { + my @a=\(@_); + my $n; + my $i=@_; + map { + $n = rand($i--); + (${$a[$n]}, $a[$n] = $a[$i])[0]; + } @_; +} + +1; diff --git a/Master/tlpkg/tlperl/lib/List/Util/XS.pm b/Master/tlpkg/tlperl/lib/List/Util/XS.pm new file mode 100644 index 00000000000..76bf6469c40 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/List/Util/XS.pm @@ -0,0 +1,45 @@ +package List::Util::XS; +use strict; +use vars qw($VERSION); +use List::Util; + +$VERSION = "1.22"; # FIXUP +$VERSION = eval $VERSION; # FIXUP + +sub _VERSION { # FIXUP + require Carp; + Carp::croak("You need to install Scalar-List-Utils with a C compiler to ensure the XS is compiled") + if defined $_[1]; + $VERSION; +} + +1; +__END__ + +=head1 NAME + +List::Util::XS - Indicate if List::Util was compiled with a C compiler + +=head1 SYNOPSIS + + use List::Util::XS 1.20; + +=head1 DESCRIPTION + +C<List::Util::XS> can be used as a dependency to ensure List::Util was +installed using a C compiler and that the XS version is installed. + +During installation C<$List::Util::XS::VERSION> will be set to +C<undef> if the XS was not compiled. + +=head1 SEE ALSO + +L<Scalar::Util>, L<List::Util>, L<List::MoreUtils> + +=head1 COPYRIGHT + +Copyright (c) 2008 Graham Barr <gbarr@pobox.com>. All rights reserved. +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut |