> On Sun, Jan 06, 2002 at 03:56:24PM +0100, Mattia Barbon wrote:
> > > Could you explain again why you need test output while compiling, I'm
> > > not quite following.  Assume you had the I_WANT_OUTPUT_DURING_COMPILE
> > > environment variable could you show how you'd be using it?
> > 
> > Let's say I have this lib/Bar/t/bar.t ( not usint Test::* )
> > ----
> > #!perl
> > 
> > BEGIN { print "1..2\n" };
> > BEGIN { print "ok 1" };
> > 
> > print "ok 2\n";
> > ----
> > This prints "1..2\nok 1\n" at compile time, and "ok 2\n"; at run
> > time. When compiled with "perlcc --testsuite bar.t", perlcc saves
> > the compile-time output, and passes to B::C the
> > -e"print qq{1..2\nok 1\n}" option ( -efoo means "eval foo just before
> > you run the program" ); so the compiled program prints
> > 1..2
> > ok 1
> > ok 2
> > and t/TEST is happy
> > 
> > However lib/Foo/t/foo.t uses Test::Simple
> > ----
> > #!perl
> > 
> > use Test::Simple tests => 2;
> > 
> > BEGIN { use_ok('Foo') }
> > 
> > ok( foo(1), "foo(1) is true" );
> > ----
> > So when compiled with B::C, $^C is set, and it does
> > not print the "1..2\nok 1\n" at all, so perlcc does not see it,
> > does not pass anything to B::C, so the compiled
> > program prints just "ok 2" and t/TEST is very unhappy.
> > The I_WANT_BEGIN_OUT ( or whatever ) works around that.
> > Hope it is clearer now.
> 
> I think I know what's going on.  Follow me here...
> 
> You're compiling the test with B::C.
Yes

> You're running the compiled program.
Yes
 
> Code inside the BEGIN blocks has $^C set??  Or are they just not being
> run at all?  Either of those are bugs.  But there's a third
The code inside the begin blocks has $^C set ( as it should ), and they are being run 
( as they should )
> possibility which I think is what's going on...
> 
> 
> If you were to take:
> 
>     BEGIN { print "foo" }
> 
> compile it and run it, would you expect the output to be 'foo'?  Or is
> the problem that you're getting 'foo' both during the compilation
> *and* when its run?  As with this:
I'd expect the output of the compiled program to be nothing _normally_ ( perlcc 
foo.pl ),
and "foo" _if I used the --testsuite switch when calling perlcc_
( perlcc --testsuite foo.pl ). 
And in order to not have to introduce hacks in t/TEST, I'd like
that the compiled program resulting from

    use Test::Simple tests => 12;

would print nothing normally, and 1..2 _if I passed the --testsuite
switch to perlcc_ .

> $ ./perl -Ilib -MO=Deparse -e 'BEGIN { print "foo\n" }'
> foo
> sub BEGIN {
>     print "foo\n";
> }
> ;
> -e syntax OK
> 
> if its that, you can do this:
> 
> $ ./perl -Ilib -MO=-qq,Deparse -e 'BEGIN { print "foo\n" }'
> sub BEGIN {
>     print "foo\n";
> }
> ;
> 
> pass the -qq option to O.pm to make it both supress STDOUT and the -e
> syntax OK.  Then it'll work as expected even with the $^C hack.
> 
> $ ./perl -Ilib -MO=-qq,Deparse -e 'BEGIN { print "ok 1\n" }  print "ok 2\n"' | ./perl
> ok 1
> ok 2
> 
> $ ./perl -Ilib -MO=-qq,Deparse -e 'BEGIN { print "ok 1\n" unless $^C }  print "ok 
>2\n"' | ./perl
> ok 1
> ok 2

I am not completely sure I understood (sorry), but if that means taht you can remove 
the $^C hack ( introduced for B::Deparse ) from Test::Builder, and pass the -qq to 
O.pm to make Test::Builder and
B::Deparse play together, then that makes me very happy. Otherwise
I am afraid I didn't follow you...

Regards
Mattia

Reply via email to