Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use Devel::StackTrace;
- my $trace = Devel::StackTrace->new;
- print $trace->as_string; # like carp
- use Carp qw<longmess>;
- use Data::Dumper;
- sub A { &B; }
- sub B { &C; }
- sub C { &D; }
- sub D { &E; }
- sub E {
- # Uncomment below if you want to see the place in E
- # local $Carp::CarpLevel = -1;
- my $mess = longmess();
- print Dumper( $mess );
- }
- A();
- __END__
- $VAR1 = ' at - line 14
- main::D called at - line 12
- main::C called at - line 10
- main::B called at - line 8
- main::A() called at - line 23
- ';
- my $stack_frame_re = qr{
- ^ # Beginning of line
- s* # Any number of spaces
- ( [w:]+ ) # Package + sub
- (?: [(] ( .*? ) [)] )? # Anything between two parens
- s+ # At least one space
- called [ ] at # "called" followed by a single space
- s+ ( S+ ) s+ # Spaces surrounding at least one non-space character
- line [ ] (d+) # line designation
- }x;
- sub get_stack {
- my @lines = split /s*ns*/, longmess;
- shift @lines;
- my @frames
- = map {
- my ( $sub_name, $arg_str, $file, $line ) = /$stack_frame_re/;
- my $ref = { sub_name => $sub_name
- , args => [ map { s/^'//; s/'$//; $_ }
- split /s*,s*/, $arg_str
- ]
- , file => $file
- , line => $line
- };
- bless $ref, $_[0] if @_;
- $ref
- }
- @lines
- ;
- return wantarray ? @frames : @frames;
- }
Add Comment
Please, Sign In to add comment