package Ref::Util::XS;
# ABSTRACT: XS implementation for Ref::Util
$Ref::Util::XS::VERSION = '0.117';
use strict;
use warnings;
use XSLoader;
use Exporter 5.57 'import';
our %EXPORT_TAGS = ( 'all' => [qw<
is_ref
is_scalarref
is_arrayref
is_hashref
is_coderef
is_regexpref
is_globref
is_formatref
is_ioref
is_refref
is_plain_ref
is_plain_scalarref
is_plain_arrayref
is_plain_hashref
is_plain_coderef
is_plain_globref
is_plain_formatref
is_plain_refref
is_blessed_ref
is_blessed_scalarref
is_blessed_arrayref
is_blessed_hashref
is_blessed_coderef
is_blessed_globref
is_blessed_formatref
is_blessed_refref
>] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
XSLoader::load('Ref::Util::XS', $Ref::Util::XS::{VERSION} ? ${ $Ref::Util::XS::{VERSION} } : ());
if (_using_custom_ops()) {
for my $op (@{$EXPORT_TAGS{all}}) {
no strict 'refs';
*{"B::Deparse::pp_$op"} = sub {
my ($deparse, $bop, $cx) = @_;
my @kids = $deparse->deparse($bop->first, 6);
my $sib = $bop->first->sibling;
if (ref $sib ne 'B::NULL') {
push @kids, $deparse->deparse($sib, 6);
}
my $prefix
= (
exists &{"$deparse->{curstash}::$op"}
&& \&{"$deparse->{curstash}::$op"} == \&{__PACKAGE__.'::'.$op}
)
? '' : (__PACKAGE__.'::');
return "$prefix$op(" . join(", ", @kids) . ")";
};
}
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Ref::Util::XS - XS implementation for Ref::Util
=head1 VERSION
version 0.117
=head1 SYNOPSIS
use Ref::Util;
# Don't use Ref::Util::XS directly!
if (is_arrayref($something) {
print for @$something;
}
elsif (is_hashref($something)) {
print for sort values %$something;
}
=head1 DESCRIPTION
Ref::Util::XS is the XS implementation of Ref::Util, which provides several
functions to help identify references in a more convenient way than the
usual approach of examining the return value of C<ref>.
You should use L<Ref::Util::XS> by installing L<Ref::Util> itself: if the system
you install it on has a C compiler available, C<Ref::Util::XS> will be
installed and used automatically, providing a significant speed boost to
everything that uses C<Ref::Util>.
See L<Ref::Util> for full documentation of the available functions.
=head1 THANKS
The following people have been invaluable in their feedback and support.
=over 4
=item * Yves Orton
=item * Steffen Müller
=item * Jarkko Hietaniemi
=item * Mattia Barbon
=item * Zefram
=item * Tony Cook
=item * Sergey Aleynikov
=back
=head1 AUTHORS AND MAINTAINERS
=over 4
=item * Aaron Crane
=item * Vikentiy Fesunov
=item * Sawyer X
=item * Gonzalo Diethelm
=item * Karen Etheridge
=item * Graham Knop
=item * p5pclub
=back
=head1 LICENSE
This software is made available under the MIT Licence as stated in the
accompanying LICENSE file.
=head1 AUTHORS
=over 4
=item *
Sawyer X <xsawyerx@cpan.org>
=item *
Aaron Crane <arc@cpan.org>
=item *
Vikenty Fesunov <vyf@cpan.org>
=item *
Gonzalo Diethelm <gonzus@cpan.org>
=item *
Karen Etheridge <ether@cpan.org>
=item *
Graham Knop <haarg@cpan.org>
=back
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2018 by Sawyer X.
This is free software, licensed under:
The MIT (X11) License
=cut