]> git.vpit.fr Git - perl/modules/B-RecDeparse.git/blobdiff - lib/B/RecDeparse.pm
Synopsis revamp
[perl/modules/B-RecDeparse.git] / lib / B / RecDeparse.pm
index 213b640ba6570858c34a5ffaa91983595263b06f..f9964207f1314ad5776338d58ea7b9dcf5108f2f 100644 (file)
@@ -1,6 +1,6 @@
 package B::RecDeparse;
 
-use 5.008;
+use 5.008001;
 
 use strict;
 use warnings;
@@ -17,33 +17,43 @@ B::RecDeparse - Deparse recursively into subroutines.
 
 =head1 VERSION
 
-Version 0.04
+Version 0.07
 
 =cut
 
-our $VERSION = '0.04';
+our $VERSION = '0.07';
 
 =head1 SYNOPSIS
 
-    perl -MO=RecDeparse,deparse,[@B__Deparse_opts],level,-1 [ -e '...' | bleh.pl ]
+    # Deparse recursively a Perl one-liner :
+    $ perl -MO=RecDeparse,deparse,@B__Deparse_opts,level,-1 -e '...'
 
-    # Or as a module :
+    # Or a complete Perl script :
+    $ perl -MO=RecDeparse,deparse,@B__Deparse_opts,level,-1 x.pl
+
+    # Or a single code reference :
     use B::RecDeparse;
 
-    my $brd = B::RecDeparse->new(deparse => [ @b__deparse_opts ], level => $level);
+    my $brd = B::RecDeparse->new(
+     deparse => \@B__Deparse_opts,
+     level   => $level,
+    );
     my $code = $brd->coderef2text(sub { ... });
 
 =head1 DESCRIPTION
 
 This module extends L<B::Deparse> by making it recursively replace subroutine calls encountered when deparsing.
 
-Please refer to L<B::Deparse> documentation for what to do and how to do it. Besides the constructor syntax, everything should work the same for the two modules.
+Please refer to L<B::Deparse> documentation for what to do and how to do it.
+Besides the constructor syntax, everything should work the same for the two modules.
 
 =head1 METHODS
 
 =head2 C<< new < deparse => [ @B__Deparse_opts ], level => $level > >>
 
-The L<B::RecDeparse> object constructor. You can specify the underlying L<B::Deparse> constructor arguments by passing a string or an array reference as the value of the C<deparse> key. The C<level> option expects an integer that specifies how many levels of recursions are allowed : C<-1> means infinite while C<0> means none and match L<B::Deparse> behaviour.
+The L<B::RecDeparse> object constructor.
+You can specify the underlying L<B::Deparse> constructor arguments by passing a string or an array reference as the value of the C<deparse> key.
+The C<level> option expects an integer that specifies how many levels of recursions are allowed : C<-1> means infinite while C<0> means none and match L<B::Deparse> behaviour.
 
 =cut
 
@@ -180,10 +190,12 @@ sub pp_gv {
 
  my $gv   = $self->gv_or_padgv($_[0]);
  my $name = $gv->NAME;
+ my $cv   = $gv->CV;
  my $seen = $self->{brd_seen};
 
  my $body;
- if ($self->{brd_sub} <= 0 || !$self->_recurse || $seen->{$name}) {
+ if (!$self->{brd_sub} or !$self->_recurse or $seen->{$name} or !$$cv
+     or !$cv->isa('B::CV') or $cv->ROOT->isa('B::NULL')) {
   $body = $self->SUPER::pp_gv(@_);
  } else {
   $body = do {
@@ -214,7 +226,8 @@ sub pp_gv {
 
 =head2 C<pp_gv>
 
-Functions and methods from L<B::Deparse> reimplemented by this module. Never call them directly.
+Functions and methods from L<B::Deparse> reimplemented by this module.
+Never call them directly.
 
 Otherwise, L<B::RecDeparse> inherits all methods from L<B::Deparse>.
 
@@ -224,6 +237,8 @@ An object-oriented module shouldn't export any function, and so does this one.
 
 =head1 DEPENDENCIES
 
+L<perl> 5.8.1.
+
 L<Carp> (standard since perl 5), L<Config> (since perl 5.00307) and L<B::Deparse> (since perl 5.005).
 
 =head1 AUTHOR
@@ -234,7 +249,8 @@ You can contact me by mail or on C<irc.perl.org> (vincent).
 
 =head1 BUGS
 
-Please report any bugs or feature requests to C<bug-b-recdeparse at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=B-RecDeparse>.  I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
+Please report any bugs or feature requests to C<bug-b-recdeparse at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=B-RecDeparse>.
+I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
 
 =head1 SUPPORT
 
@@ -246,7 +262,7 @@ Tests code coverage report is available at L<http://www.profvince.com/perl/cover
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2008,2009,2010 Vincent Pit, all rights reserved.
+Copyright 2008,2009,2010,2011,2013 Vincent Pit, all rights reserved.
 
 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.