$url =~ s/\s+-\S+//g; # remove command line options
$url =~ s/\W+/-/g;
- my ( $package, $file, $line, $sub ) = caller(1);
- ( $package, undef, $line ) = caller(0) if ! $package || $package eq 'main';
-
- my $time = time();
- $sub =~ s{^.+::}{}; # stip package name
+ my $time = $data->{time} = time();
+
+ my @caller_name = ( qw/package file line sub/ );
+ my @caller = caller(0);
+ $caller[3] =~ s{^.+::}{}; # stip package name from sub
+ $data->{ $caller_name[$_] } = $caller[$_] foreach ( 0 .. $#caller_name );
+
+ my $caller;
+ my $depth = 0;
+ while ( my @c = caller($depth) ) {
+ push @$caller, [ @c ];
+ $depth++;
+ }
- $data->{$_} = eval '$' . $_ foreach ( qw/time package line sub/ );
+ $data->{caller} = $caller;
# carp 'audit ', dump($data);
- $time = int($time); # reduce granularity
+ $time = int($time); # reduce granularity for url
+ my $package = $caller[0];
$audit->put( "pxelator/$time.$package.$url", $data );
}