| Devel-Caller-Perl documentation | Contained in the Devel-Caller-Perl distribution. |
Devel::Caller::Perl - Perl only implementation.
use Devel::Caller::Perl qw[called_args];
sub permute_args {
my @args = @_;
my @caller_args = called_args( 0 );
my %caller_args =
map { $_ => $caller_args[$_] } 0 .. $#caller_args;
return \%caller_args;
}
sub dodad {
my $args = permute_args;
print $args->{0};
# ...
}
This module allows a method to get at arguments passed to subroutines higher up in the call stack.
called_args returns the arguments to the subroutine at LEVEL in
the call stack. If no level is specified, 0 (zero) is assumed, that
being our caller. If a list is expected, it will be returned. When a
scalar is expected, a list reference will be returned.
If you want the number of arguments passed to the subroutine at LEVEL,
there's nothing stopping you from getting it from caller.
my $number = (caller $level)[4];
Casey West <casey@geeknest.com>
Rocco Caputo -- Much help with code and overall inspiration.
Copyright (c) 2003 Casey West. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
perl, Devel::Caller, DB, perldebguts.
| Devel-Caller-Perl documentation | Contained in the Devel-Caller-Perl distribution. |
package DB; sub called_args { my ($level) = @_; my @foo = caller( ( $level || 0 ) + 3 ); wantarray ? @DB::args : \@DB::args; } package Devel::Caller::Perl; use DB; $Devel::Caller::Perl::VERSION = '1.4'; sub import { *{(caller)[0].'::called_args'} = \&called_args if $_[1] eq 'called_args'; } sub called_args { &DB::called_args } 1; __END__