On Thu, Apr 17, 2008 at 2:58 AM, <[EMAIL PROTECTED]> wrote:
> Hi All,
>
> Is there any mechanism where I can take the log of entire Perl script. I
> mean to say that I need the log of each and every step which I am doing
> in Perl script. That step may include
>
> 1: input from user
>
> 2: internal Perl script commands
>
> Ultimately whatever Perl script is doing , I should know.
snip
To my knowledge there is no easy way. The closest I have gotten to
this is the Devel::ebug* module on CPAN.
What follows is a program I wrote with it to give a set-x-like
functionality to Perl scripts. Given this script:
#!/usr/bin/perl
use strict;
use warnings;
my $i = 1;
my $j = 10;
$i++;
for (0 .. 5) {
$i++;
$j++;
}
it produces
+++ file:q.pl line: 6
+ use strict;
+ use warnings;
+
+> my $i = 1;
+ my $j = 10;
+
+ $i++;
+++ file:q.pl line: 7
++ $i = 1
+ use warnings;
+
+ my $i = 1;
+> my $j = 10;
+
+ $i++;
+
+++ file:q.pl line: 9
++ $i = 1
++ $j = 10
+ my $i = 1;
+ my $j = 10;
+
+> $i++;
+
+ for (0 .. 5) {
+ $i++;
+++ file:q.pl line: 11
++ $i = 2
++ $j = 10
+
+ $i++;
+
+> for (0 .. 5) {
+ $i++;
+ $j++;
+ }
+++ file:q.pl line: 12
++ $i = 2
++ $j = 10
+ $i++;
+
+ for (0 .. 5) {
+> $i++;
+ $j++;
+ }
+++ file:q.pl line: 13
++ $i = 3
++ $j = 10
+
+ for (0 .. 5) {
+ $i++;
+> $j++;
+ }
+++ file:q.pl line: 12
++ $i = 3
++ $j = 11
+ $i++;
+
+ for (0 .. 5) {
+> $i++;
+ $j++;
+ }
+++ file:q.pl line: 13
++ $i = 4
++ $j = 11
+
+ for (0 .. 5) {
+ $i++;
+> $j++;
+ }
+++ file:q.pl line: 12
++ $i = 4
++ $j = 12
+ $i++;
+
+ for (0 .. 5) {
+> $i++;
+ $j++;
+ }
+++ file:q.pl line: 13
++ $i = 5
++ $j = 12
+
+ for (0 .. 5) {
+ $i++;
+> $j++;
+ }
+++ file:q.pl line: 12
++ $i = 5
++ $j = 13
+ $i++;
+
+ for (0 .. 5) {
+> $i++;
+ $j++;
+ }
+++ file:q.pl line: 13
++ $i = 6
++ $j = 13
+
+ for (0 .. 5) {
+ $i++;
+> $j++;
+ }
+++ file:q.pl line: 12
++ $i = 6
++ $j = 14
+ $i++;
+
+ for (0 .. 5) {
+> $i++;
+ $j++;
+ }
+++ file:q.pl line: 13
++ $i = 7
++ $j = 14
+
+ for (0 .. 5) {
+ $i++;
+> $j++;
+ }
+++ file:q.pl line: 12
++ $i = 7
++ $j = 15
+ $i++;
+
+ for (0 .. 5) {
+> $i++;
+ $j++;
+ }
+++ file:q.pl line: 13
++ $i = 8
++ $j = 15
+
+ for (0 .. 5) {
+ $i++;
+> $j++;
+ }
Here is the code:
#!/usr/bin/perl
use strict;
use warnings;
use Devel::ebug;
use Data::Dumper;
my $ebug = Devel::ebug->new;
$ebug->program(shift);
$ebug->load;
until ($ebug->finished) {
print "+++ file:", $ebug->filename, " line: ", $ebug->line, "\n";
my $pad = $ebug->pad;
for my $var (sort keys %$pad) {
if (ref $pad->{$var}) {
for my $line (split /\n/,
Data::Dumper->Dump([$pad->{$var}], [$var])) {
print "++ $line\n";
}
} else {
print "++ $var = $pad->{$var}\n";
}
}
for my $line ($ebug->codelines($ebug->line-3 .. $ebug->line-1)) {
next unless defined $line;
print "+ $line\n";
}
print "+> ", $ebug->codeline, "\n";
for my $line ($ebug->codelines($ebug->line+1 .. $ebug->line+3)) {
next unless defined $line;
print "+ $line\n";
}
$ebug->step;
}
* http://search.cpan.org/~lbrocard/Devel-ebug-0.48/lib/Devel/ebug.pm
--
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/