The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Devel::StackTrace::WithLexicals - Devel::StackTrace + PadWalker

SYNOPSIS

use Devel::StackTrace::WithLexicals;

sub process_user {
    my $item_count = 20;
    price_items();
    print "$item_count\n";    # prints 21
}

sub price_items {
    my $trace = Devel::StackTrace::WithLexicals->new(
        unsafe_ref_capture => 1    # warning: can cause memory leak
    );
    while ( my $frame = $trace->next_frame() ) {
        my $item_count_ref = $frame->lexical('$item_count');
        ${$item_count_ref}++ if ref $item_count_ref eq 'SCALAR';
    }
}

process_user();

DESCRIPTION

Devel::StackTrace is pretty good at generating stack traces.

PadWalker is pretty good at the inspection and modification of your callers' lexical variables.

Devel::StackTrace::WithLexicals is pretty good at generating stack traces with all your callers' lexical variables.

METHODS

All the same as Devel::StackTrace, except that frames (in class Devel::StackTrace::WithLexicals::Frame) also have a lexicals method. This returns the same hashref as returned by PadWalker.

Unless the unsafe_ref_capture option to Devel::StackTrace is used, then each reference is stringified. This can be useful to avoid leaking memory.

Simple, really.

AUTHOR

Shawn M Moore, sartak@gmail.com

BUGS

I had to copy and paste some code from Devel::StackTrace to achieve this (it's hard to subclass). There may be bugs lingering here.

COPYRIGHT AND LICENSE

Copyright 2008-2009 Shawn M Moore.

Some portions written by Dave Rolsky, they belong to him.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.