Datahub-Factory
view release on metacpan or search on metacpan
lib/Datahub/Factory/Util.pm view on Meta::CPAN
package Datahub::Factory::Util;
use Datahub::Factory::Sane;
our $VERSION = '1.77';
use Exporter qw(import);
use Scalar::Util ();
use Ref::Util ();
our %EXPORT_TAGS = (
misc => [qw(require_package)]
);
our @EXPORT_OK = map {@$_} values %EXPORT_TAGS;
$EXPORT_TAGS{all} = \@EXPORT_OK;
# globtype Reference
*is_ref = \&Ref::Util::is_ref;
# globtype Reference
*is_glob_ref = \&Ref::Util::is_plain_globref;
# Output everything in UTF-8
binmode STDOUT, ":utf8";
sub is_value {
defined($_[0]) && !is_ref($_[0]) && !is_glob_ref(\$_[0]);
}
sub is_string {
is_value($_[0]) && length($_[0]) > 0;
}
sub is_invocant {
my ($inv) = @_;
if (ref $inv) {
return !!Scalar::Util::blessed($inv);
}
else {
return !!_get_stash($inv);
}
}
sub is_instance {
my $obj = shift;
Scalar::Util::blessed($obj) || return 0;
$obj->isa($_) || return 0 for @_;
1;
}
sub require_package {
my ($pkg, $ns) = @_;
if ($ns) {
unless ($pkg =~ s/^\+// || $pkg =~ /^$ns/) {
$pkg = "${ns}::$pkg";
}
}
return $pkg if is_invocant($pkg);
eval "require $pkg;1;"
or Catmandu::NoSuchPackage->throw(
message => "No such package: $pkg",
package_name => $pkg
);
$pkg;
}
# the following code is taken from Data::Util::PurePerl 0.63
sub _get_stash {
my ($inv) = @_;
if (Scalar::Util::blessed($inv)) {
no strict 'refs';
return \%{ref($inv) . '::'};
}
elsif (!is_string($inv)) {
return undef;
}
( run in 1.182 second using v1.01-cache-2.11-cpan-39bf76dae61 )