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/


Reply via email to