I once used
Aspect. I was trying to trace the double quotes operator (that's what's being called implicitly when using print). The following is an example.
use strict;
use warnings;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
use Aspect qw(advice calls returns around) ;
my $aspect = advice(
calls(qr/^(Quantum|main)::(.*)/),
sub { printf "calling -> %s\n", $::thisjp->sub }
);
$aspect->enable;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
use Quantum::Entanglement;
sub foo {
my $die = entangle( 1=>1, 1=>2, 1=>3, 1=>4, 1=>5, 1=>6 );
print "$die" ; # observed state
print "\n" ;
}
foo();
__END__
calling -> main::foo
calling -> main::entangle
calling -> Quantum::Entanglement::_new
calling -> Quantum::Entanglement::(""
calling -> Quantum::Entanglement::_normalise
3
calling -> Quantum::Entanglement::DESTROY
calling -> Quantum::Entanglement::_rationalise_states
calling -> Quantum::Entanglement::_unravel