Fauxtobox
view release on metacpan or search on metacpan
lib/Fauxtobox.pm view on Meta::CPAN
}
sub _fixed {
my ($n, $name) = @_;
_fixed_opt $n, 0, $name
}
sub _scalar {
my ($name) = @_;
_fixed 1, $name
}
sub _hxa {
my ($name) = @_;
my $body =
$^V ge v5.12.0 ?
"ref(\$_[0]) eq 'ARRAY' ? $name \@{\$_[0]} : $name %{\$_[0]}" :
"$name %{\$_[0]}"
;
$body = "[$body]" unless $name eq 'each';
$name => eval_string("sub { $body }")
}
my %functions = (
apply => sub { my $x = shift; my $f = shift; $f->($x, @_) },
list => sub { ref($_[0]) eq 'HASH' ? %{$_[0]} : @{$_[0]} },
qr => sub { @_ > 1 ? qr/(?$_[1])$_[0]/ : qr/$_[0]/ },
m => sub { $_[0] =~ /$_[1]/ },
m_g => sub { $_[0] =~ /$_[1]/g },
m_gc => sub { $_[0] =~ /$_[1]/gc },
s => sub { ref($_[2]) ? $_[0] =~ s/$_[1]/$_[2]()/e : $_[0] =~ s/$_[1]/$_[2]/ },
s_g => sub { ref($_[2]) ? $_[0] =~ s/$_[1]/$_[2]()/ge : $_[0] =~ s/$_[1]/$_[2]/g },
$^V ge v5.14.0 ? (
s_r => eval_string('sub { ref($_[2]) ? $_[0] =~ s/$_[1]/$_[2]()/re : $_[0] =~ s/$_[1]/$_[2]/r }'),
s_gr => eval_string('sub { ref($_[2]) ? $_[0] =~ s/$_[1]/$_[2]()/gre : $_[0] =~ s/$_[1]/$_[2]/gr }'),
) : (
s_r => sub { my $s = $_[0]; if (ref $_[2]) { $s =~ s/$_[1]/$_[2]()/e } else { $s =~ s/$_[1]/$_[2]/ } $s },
s_gr => sub { my $s = $_[0]; if (ref $_[2]) { $s =~ s/$_[1]/$_[2]()/ge } else { $s =~ s/$_[1]/$_[2]/g } $s },
),
(map _filetest($_), qw(
r w x o
R W X O
e z s
f d l p S b c t
u g k
T B
M A C
)),
_scalar('abs'),
_scalar('alarm'),
_fixed(2, 'atan2'),
bless => defined &CORE::bless ? \&CORE::bless : sub { bless $_[0], @_ > 1 ? $_[1] : scalar caller },
_scalar('chdir'),
_xlist(1, 'chmod'),
_xlist(0, 'chomp'),
_xlist(0, 'chop'),
_xlist(2, 'chown'),
_scalar('chr'),
_scalar('chroot'),
_scalar('cos'),
_fixed(2, 'crypt'),
defined => sub { defined $_[0] },
delete => sub {
ref($_[0]) eq 'ARRAY' ?
delete $_[0][$_[1]] :
delete $_[0]{$_[1]}
},
_scalar('die'),
_hxa('each'),
eval => sub { eval $_[0] },
exec => sub {
my $prog = shift;
@_ ? exec { $prog } @_ :
ref($prog) eq 'ARRAY' ? exec @$prog :
exec $prog
},
exists => sub {
ref($_[0]) eq 'ARRAY' ?
exists $_[0][$_[1]] :
exists $_[0]{$_[1]}
},
_scalar('exit'),
_scalar('exp'),
$^V ge v5.16.0 ? (fc => \&CORE::fc) : (),
_scalar('getpgrp'),
_scalar('getpwnam'),
_scalar('getgrnam'),
_scalar('gethostbyname'),
_scalar('getnetbyname'),
_scalar('getprotobyname'),
_scalar('getpwuid'),
_scalar('getgrgid'),
_fixed(2, 'getservbyname'),
_fixed(2, 'gethostbyaddr'),
_fixed(2, 'getnetbyaddr'),
_scalar('getprotobynumber'),
_fixed(2, 'getservbyport'),
glob => sub { [ glob $_[0] ] },
_scalar('gmtime'),
grep => sub { my ($arg, $f) = @_; [ grep $f->($_), @$arg ] },
_scalar('hex'),
_fixed_opt(2, 1, 'index'),
_scalar('int'),
join => sub { join $_[1], @{$_[0]} },
_hxa('keys'),
_xlist(1, 'kill'),
_scalar('lc'),
_scalar('lcfirst'),
_scalar('length'),
_fixed(2, 'link'),
_scalar('localtime'),
_scalar('log'),
_scalar('lstat'),
map => sub { my ($arg, $f) = @_; [ map $f->($_), @$arg ] },
_scalar('mkdir'),
_scalar('oct'),
_scalar('ord'),
lib/Fauxtobox.pm view on Meta::CPAN
=item $_test_C
These are file test operators. C<< $X->$_test_X >> is equivalent to
C<< -X $X >> for all letters I<X> listed above.
See L<perlfunc/-X>.
=item $_abs
C<< $X->$_abs >> is equivalent to C<< abs $X >>.
See L<perlfunc/abs>.
=item $_alarm
C<< $X->$_alarm >> is equivalent to C<< alarm $X >>.
See L<perlfunc/alarm>.
=item $_atan2
C<< $X->atan2($Y) >> is equivalent to C<< atan2 $X, $Y >>.
See L<perlfunc/atan2>.
=item $_bless
C<< $X->$_bless($CLASS) >> is equivalent to C<< bless $X, $CLASS >>.
C<< $X->$_bless >> is equivalent to C<< bless $X >>.
See L<perlfunc/bless>.
=item $_chdir
C<< $X->$_chdir >> is equivalent to C<< chdir $X >>.
See L<perlfunc/chdir>.
=item $_chmod
C<< $X->$_chmod($MODE) >> is equivalent to C<< chmod $MODE, @{$X} >> if
C<$X> is an array reference and C<< chmod $MODE, $X >> otherwise.
See L<perlfunc/chmod>.
=item $_chomp
C<< $X->$_chomp >> is equivalent to C<< chomp @{$X} >> if C<$X> is an array
reference and C<< chomp $X >> otherwise.
See L<perlfunc/chomp>.
=item $_chop
C<< $X->$_chop >> is equivalent to C<< chop @{$X} >> if C<$X> is an array
reference and C<< chop $X >> otherwise.
See L<perlfunc/chop>.
=item $_chown
C<< $X->$_chown($UID, $GID) >> is equivalent to
C<< chown $UID, $GID, @{$X} >> if C<$X> is an array reference and
C<< chown $UID, $GID, $X >> otherwise.
See L<perlfunc/chown>.
=item $_chr
C<< $X->$_chr >> is equivalent to C<< chr $X >>.
See L<perlfunc/chr>.
=item $_chroot
C<< $X->$_chroot >> is equivalent to C<< chroot $X >>.
See L<perlfunc/chroot>.
=item $_cos
C<< $X->$_cos >> is equivalent to C<< cos $X >>.
See L<perlfunc/cos>.
=item $_crypt
C<< $X->$_crypt($SALT) >> is equivalent to C<< crypt $X, $SALT >>.
See L<perlfunc/crypt>.
=item $_defined
C<< $X->$_defined >> is equivalent to C<< defined $X >>.
See L<perlfunc/defined>.
=item $_delete
C<< $X->$_delete($KEY) >> is equivalent to C<< delete $X->[$KEY] >> if $X is
an array reference and C<< delete $X->{$KEY} >> otherwise.
See L<perlfunc/delete>.
=item $_die
C<< $X->$_die >> is equivalent to C<< die $X >>.
See L<perlfunc/die>.
=item $_each
C<< $X->$_each >> is equivalent to C<< each @{$X} >> if C<$X> is an array
reference and C<< each %{$X} >> otherwise.
See L<perlfunc/each>.
=item $_eval
C<< $X->$_eval >> is equivalent to C<< eval $X >>.
See L<perlfunc/eval>.
=item $_exec
C<< $X->$_exec(@ARGS) >> is equivalent to C<< exec { $X } @ARGS >>.
( run in 2.404 seconds using v1.01-cache-2.11-cpan-6aa56a78535 )