Symbol-Get
view release on metacpan or search on metacpan
lib/Symbol/Get.pm view on Meta::CPAN
}
#Referenced in tests.
sub _perl_supports_getting_list_constant_ref { return $^V ge MIN_LIST_CONSTANT_PERL_VERSION() }
sub _get_constant {
my ($var) = @_;
my $ref = _get_table_hr($var);
if ('SCALAR' ne ref($ref) && 'ARRAY' ne ref($ref)) {
my $msg = "$var is a regular symbol table entry, not a constant.";
if ( !_perl_supports_getting_list_constant_ref() ) {
$msg .= " Your Perl version ($^V) stores list constants in the symbol table as CODE references rather than ARRAYs; maybe thatâs the issue?";
}
die $msg;
}
return $ref;
}
sub get_names {
my ($module) = @_;
$module ||= (caller 0)[0];
Call::Context::must_be_list();
my $table_hr = _get_module_table_hr($module);
die "Unknown namespace: â$moduleâ" if !$table_hr;
return keys %$table_hr;
}
#----------------------------------------------------------------------
# To be completed if needed:
#
#sub list_sigils {
# my ($full_name) = @_;
#
# Call::Context::must_be_list();
#
# my ($module, $name) = ($full_name =~ m<(?:(.+)::)?(.+)>);
#
# my $table_hr = _get_table_for_module_name($module);
# my $glob = *{$table_hr};
#
# return
#}
#
#----------------------------------------------------------------------
sub _get_module_table_hr {
my ($module) = @_;
my @nodes = split m<::>, $module;
my $table_hr = \%main::;
my $pkg = q<>;
for my $n (@nodes) {
$table_hr = $table_hr->{"$n\::"};
$pkg .= "$n\::";
}
return $table_hr;
}
sub _get_table_hr {
my ($name) = @_;
$name =~ m<\A (?: (.+) ::)? ([^:]+ (?: ::)?) \z>x or do {
die "Invalid variable name: â$nameâ";
};
my $module = $1 || (caller 1)[0];
my $table_hr = _get_module_table_hr($module);
return $table_hr->{$2};
}
1;
( run in 2.208 seconds using v1.01-cache-2.11-cpan-71847e10f99 )