Acme-Locals
view release on metacpan or search on metacpan
lib/Acme/Locals.pm view on Meta::CPAN
sub sprintx ($@) { ## no critic
my $peek_level = 1;
my $call_class;
if (_ARRAY( $_[0] )) {
$call_class = shift->[0];
$peek_level++;
}
$call_class ||= caller 0;
my ($fmt, %bind_vars) = @_;
my @binds;
my $map_bind_var = sub {
my ($bind_var_name, $format_char) = @_;
local *__ANON__ = 'map_bind_var'; ## no critic
my $internal_name = $bind_var_name;
if (exists $bind_vars{$internal_name}) {
# pass
}
elsif (exists $bind_vars{q{$}.$internal_name}) {
$internal_name = q{$}.$internal_name;
}
else {
croak "No such bind var: $bind_var_name";
}
my $value_ref = $bind_vars{$internal_name};
croak 'Bind var must be scalar'
if not _SCALAR($value_ref);
push @binds, ${ $value_ref };
return defined $format_char ? q{%} . $format_char
: $DEFAULT_FORMAT;
};
my $mode = $mode_for_class{$call_class} || $DEFAULT_MODE;
my $re = $MODES{ $mode };
if ($mode eq '-ruby' && !scalar keys %bind_vars) {
%bind_vars = %{ PadWalker::peek_my($peek_level) };
}
$fmt =~ s/$re/$map_bind_var->($1, $2)/xmseg;
return sprintf $fmt, @binds;
}
sub lexicals {
goto &locals;
}
sub locals {
return wantarray ? %{ PadWalker::peek_my(1) }
: PadWalker::peek_my(1);
}
( run in 0.935 second using v1.01-cache-2.11-cpan-2398b32b56e )