/usr/share/perl5/Devel/Trace.pm is in libdevel-trace-perl 0.12-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | # -*- perl -*-
package Devel::Trace;
$VERSION = '0.12';
$TRACE = 1;
# This is the important part. The rest is just fluff.
sub DB::DB {
return unless $TRACE;
my ($p, $f, $l) = caller;
my $code = \@{"::_<$f"};
print STDERR ">> $f:$l: $code->[$l]";
}
sub import {
my $package = shift;
foreach (@_) {
if ($_ eq 'trace') {
my $caller = caller;
*{$caller . '::trace'} = \&{$package . '::trace'};
} else {
use Carp;
croak "Package $package does not export `$_'; aborting";
}
}
}
my %tracearg = ('on' => 1, 'off' => 0);
sub trace {
my $arg = shift;
$arg = $tracearg{$arg} while exists $tracearg{$arg};
$TRACE = $arg;
}
1;
=head1 NAME
Devel::Trace - Print out each line before it is executed (like C<sh -x>)
=head1 SYNOPSIS
perl -d:Trace program
=head1 DESCRIPTION
If you run your program with C<perl -d:Trace program>, this module
will print a message to standard error just before each line is executed.
For example, if your program looks like this:
#!/usr/bin/perl
print "Statement 1 at line 4\n";
print "Statement 2 at line 5\n";
print "Call to sub x returns ", &x(), " at line 6.\n";
exit 0;
sub x {
print "In sub x at line 12.\n";
return 13;
}
Then the C<Trace> output will look like this:
>> ./test:4: print "Statement 1 at line 4\n";
>> ./test:5: print "Statement 2 at line 5\n";
>> ./test:6: print "Call to sub x returns ", &x(), " at line 6.\n";
>> ./test:12: print "In sub x at line 12.\n";
>> ./test:13: return 13;
>> ./test:8: exit 0;
This is something like the shell's C<-x> option.
=head1 DETAILS
Inside your program, you can enable and disable tracing by doing
$Devel::Trace::TRACE = 1; # Enable
$Devel::Trace::TRACE = 0; # Disable
or
Devel::Trace::trace('on'); # Enable
Devel::Trace::trace('off'); # Disable
C<Devel::Trace> exports the C<trace> function if you ask it to:
import Devel::Trace 'trace';
Then if you want you just say
trace 'on'; # Enable
trace 'off'; # Disable
=head1 TODO
=over 4
=item *
You should be able to send the trace output to the filehandle of your choice.
=item *
You should be able to specify the format of the output.
=item *
You should be able to get the output into a string.
=back
We'll see.
=head1 LICENSE
Devel::Trace 0.11 and its source code are hereby placed in the public domain.
=head1 Author
=begin text
Mark-Jason Dominus (C<mjd-perl-trace@plover.com>), Plover Systems co.
See the C<Devel::Trace.pm> Page at http://www.plover.com/~mjd/perl/Trace
for news and upgrades.
=end text
=begin man
Mark-Jason Dominus (C<mjd-perl-trace@plover.com>), Plover Systems co.
See the C<Devel::Trace.pm> Page at http://www.plover.com/~mjd/perl/Trace
for news and upgrades.
=end man
=begin html
<p>Mark-Jason Dominus (<a href="mailto:mjd-perl-trace@plover.com"><tt>mjd-perl-trace@plover.com</tt></a>), Plover Systems co.</p>
<p>See <a href="http://www.plover.com/~mjd/perl/Trace/">The <tt>Devel::Trace.pm</tt> Page</a> for news and upgrades.</p>
=end html
=cut
|