use warnings;
use strict;
three(5);
sub three {
return two(shift);
}
sub two {
return one(_helper(shift));
}
sub one {
my $num = calc(shift);
display($num);
}
sub calc {
my $num = shift;
return $num ** 3;
}
sub display {
my $num = shift;
print "$num\n";
}
sub _helper {
my $num = shift;
return ++$num;
}
####
use warnings;
use Devel::Trace::Subs qw(trace trace_dump); # injected by Devel::Trace::Subs
use strict;
three(5);
sub three {
trace() if $ENV{DTS_ENABLE}; # injected by Devel::Trace::Subs
return two(shift);
}
sub two {
trace() if $ENV{DTS_ENABLE}; # injected by Devel::Trace::Subs
return one(_helper(shift));
}
sub one {
trace() if $ENV{DTS_ENABLE}; # injected by Devel::Trace::Subs
my $num = calc(shift);
display($num);
}
sub calc {
trace() if $ENV{DTS_ENABLE}; # injected by Devel::Trace::Subs
my $num = shift;
return $num ** 3;
}
sub display {
trace() if $ENV{DTS_ENABLE}; # injected by Devel::Trace::Subs
my $num = shift;
print "$num\n";
}
sub _helper {
trace() if $ENV{DTS_ENABLE}; # injected by Devel::Trace::Subs
my $num = shift;
return ++$num;
}
##
##
$ENV{DTS_ENABLE} = 1;
three(5); # this is the original call stack you're running
trace_dump();
##
##
216
Code flow:
1: main::three
2: main::two
3: main::_helper
4: main::one
5: main::calc
6: main::display
Stack trace:
in: main::three
sub: -
file: test.pl
line: 7
package: main
in: main::two
sub: main::three
file: test.pl
line: 13
package: main
in: main::_helper
sub: main::two
file: test.pl
line: 17
package: main
in: main::one
sub: main::two
file: test.pl
line: 17
package: main
in: main::calc
sub: main::one
file: test.pl
line: 21
package: main
in: main::display
sub: main::one
file: test.pl
line: 22
package: main
##
##
$ENV{DTS_ENABLE} = 1;
trace_dump();