[PATCH #2] Re: [perl #22181] goto undefines my() variables
[p5sagit/p5-mst-13.2.git] / ext / B / O.pm
index 89352fb..7012c36 100644 (file)
@@ -1,16 +1,22 @@
 package O;
+
+our $VERSION = '1.00';
+
 use B qw(minus_c save_BEGINs);
-use Carp;    
+use Carp;
 
 sub import {
     my ($class, @options) = @_;
-    my $quiet = 0;
-    if ($options[0] eq '-q') {
+    my ($quiet, $veryquiet) = (0, 0);
+    if ($options[0] eq '-q' || $options[0] eq '-qq') {
        $quiet = 1;
-       shift @options;
        open (SAVEOUT, ">&STDOUT");
        close STDOUT;
        open (STDOUT, ">", \$O::BEGIN_output);
+       if ($options[0] eq '-qq') {
+           $veryquiet = 1;
+       }
+       shift @options;
     }
     my $backend = shift (@options);
     eval q[
@@ -25,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: $@";
@@ -36,7 +47,11 @@ sub import {
                die $compilesub;
            }
 
+           local $savebackslash = $\;
+           local ($\,$",$,) = (undef,' ','');
            &$compilesub();
+
+           close STDERR if $veryquiet;
        }
     ];
     die $@ if $@;
@@ -67,6 +82,10 @@ produce output themselves (C<Deparse>, C<Concise> etc), so that
 their output is not confused with that generated by the code
 being compiled.
 
+The C<-qq> option behaves like C<-q>, except that it also closes
+STDERR after deparsing has finished. This suppresses the "Syntax OK"
+message normally produced by perl.
+
 =head1 CONVENTIONS
 
 Most compiler backends use the following conventions: OPTIONS
@@ -112,6 +131,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>