Fix bug #49298: B::Deparse fails to deparse a reference to an anonymous hash
[p5sagit/p5-mst-13.2.git] / ext / B / O.pm
index 50a445c..d60e91a 100644 (file)
@@ -3,7 +3,7 @@ package O;
 our $VERSION = '1.00';
 
 use B qw(minus_c save_BEGINs);
-use Carp;    
+use Carp;
 
 sub import {
     my ($class, @options) = @_;
@@ -31,6 +31,11 @@ sub import {
                open (STDOUT, ">&SAVEOUT");
                close SAVEOUT;
            }
+
+           # Note: if you change the code after this 'use', please
+           # change the fudge factors in B::Concise (grep for
+           # "fragile kludge") so that its output still looks
+           # nice. Thanks. --smcc
            use B::].$backend.q[ ();
            if ($@) {
                croak "use of backend $backend failed: $@";
@@ -42,7 +47,8 @@ sub import {
                die $compilesub;
            }
 
-           local ($\,$",$,) = (undef,' ','');
+           local $savebackslash = $\;
+           local ($\,$",$,) = (undef,' ','');
            &$compilesub();
 
            close STDERR if $veryquiet;
@@ -101,16 +107,15 @@ the Perl code
 
     use O ("Backend", OPTIONS);
 
-The C<import> function which that calls loads in the appropriate
-C<B::Backend> module and calls the C<compile> function in that
-package, passing it OPTIONS. That function is expected to return
-a sub reference which we'll call CALLBACK. Next, the "compile-only"
-flag is switched on (equivalent to the command-line option C<-c>)
-and a CHECK block is registered which calls CALLBACK. Thus the main
-Perl program mentioned on the command-line is read in, parsed and
-compiled into internal syntax tree form. Since the C<-c> flag is
-set, the program does not start running (excepting BEGIN blocks of
-course) but the CALLBACK function registered by the compiler
+The C<O::import> function loads the appropriate C<B::Backend> module
+and calls its C<compile> function, passing it OPTIONS. That function
+is expected to return a sub reference which we'll call CALLBACK. Next,
+the "compile-only" flag is switched on (equivalent to the command-line
+option C<-c>) and a CHECK block is registered which calls
+CALLBACK. Thus the main Perl program mentioned on the command-line is
+read in, parsed and compiled into internal syntax tree form. Since the
+C<-c> flag is set, the program does not start running (excepting BEGIN
+blocks of course) but the CALLBACK function registered by the compiler
 backend is called.
 
 In summary, a compiler backend module should be called "B::Foo"
@@ -125,6 +130,12 @@ After the user's program is loaded and parsed, that returned sub ref
 is invoked which can then go ahead and do the compilation, usually by
 making use of the C<B> module's functionality.
 
+=head1 BUGS
+
+The C<-q> and C<-qq> options don't work correctly if perl isn't
+compiled with PerlIO support : STDOUT will be closed instead of being
+redirected to C<$O::BEGIN_output>.
+
 =head1 AUTHOR
 
 Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>