in reply to Does a browser execute a redirect before the script ends?

You yould use META tags instead of outputting a 302 redirect header:
my $secs = 5; my $url = 'http://foo.com/bar.html'; print qq{<meta http-equiv="refresh" content="$secs"; url=$url">\n};

to redirect to the new page after 5 seconds.

Refining that, you could stuff the Java output (if it really consists of dots only) into a META tag itself:

print qq{<meta http-equiv="keywords" content="}; java->make_HTML_file; print qq{">\n<meta http-equiv="refresh" content="0; url=$url"></head>\ +n};

(untested). That way the browser waits 'til the Java IO.OutputStream or such is finished, then reads your redirect meta directive and off it goes to the new page...

As for redirection, re-opening STDOUT to /dev/null should work, but you might need to save your STDOUT and redirect even before the Inline::Java module is loaded, since it could get hold of a duped STDOUT, e.g.

#!/usr/bin/perl package Foo; open MYOUT, ">&STDOUT" or die "Can't dup STDOUT: $!\n"; sub say { print MYOUT "@_\n"} package main; open STDOUT, '>', "/dev/null" or die "open: $!\n"; print "nope"; Foo->say("oops"); __END__ Foo oops

- dunno, never played with that beast.

update: added STDOUT dup example

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}