1
0
Fork 0
mirror of https://github.com/perlbot/perlbuut synced 2025-06-09 08:25:39 -04:00

this should make for nicer output with an eval that ends in print

This commit is contained in:
Ryan Voots 2012-09-17 20:23:11 -07:00
parent 8af344deff
commit 812b22ed95

View file

@ -29,6 +29,13 @@ require MooseX::Declare;
eval "use MooseX::Declare; class Foo { has dongs => ( is => ro, isa => 'Int' ); };"; eval "use MooseX::Declare; class Foo { has dongs => ( is => ro, isa => 'Int' ); };";
require "utf8_heavy.pl"; require "utf8_heavy.pl";
# save the old stdout, we're going to clobber it soon. STDOUT
my $oldout;
my $outbuffer;
my $outputcode;
open($oldout, ">&STDOUT") or die "Can't dup STDOUT: $!";
no warnings; no warnings;
# This sub is defined here so that it is defined before the 'use charnames' # This sub is defined here so that it is defined before the 'use charnames'
@ -154,6 +161,9 @@ use Storable qw/nfreeze/; nfreeze([]); #Preload Nfreeze since it's loaded on dem
my $meg = $kilo * $kilo; my $meg = $kilo * $kilo;
my $limit = 150 * $meg; my $limit = 150 * $meg;
# clobber stdout before we set rlimits. otherwise we can't do anything STDOUT
open(STDOUT, ">", \$outbuffer) or die "Can't dup to buffer: $!";
( (
setrlimit(RLIMIT_VMEM, 1024*$meg, 1024*$meg) setrlimit(RLIMIT_VMEM, 1024*$meg, 1024*$meg)
and and
@ -222,6 +232,8 @@ use Storable qw/nfreeze/; nfreeze([]); #Preload Nfreeze since it's loaded on dem
j_code($code); j_code($code);
} }
$oldout->print($outbuffer);
exit; exit;
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
@ -233,6 +245,8 @@ use Storable qw/nfreeze/; nfreeze([]); #Preload Nfreeze since it's loaded on dem
local @INC; local @INC;
local $_; local $_;
# setup STDOUT for use in the eval. I should really try to hide these better but it can't cause any issues
$code = "no strict; no warnings; package main; $code"; $code = "no strict; no warnings; package main; $code";
my $ret = eval $code; my $ret = eval $code;
@ -243,8 +257,7 @@ use Storable qw/nfreeze/; nfreeze([]); #Preload Nfreeze since it's loaded on dem
my $out = ref($ret) ? Dumper( $ret ) : "" . $ret; my $out = ref($ret) ? Dumper( $ret ) : "" . $ret;
print $out; print $out unless $outbuffer;
if( $@ ) { print "ERROR: $@" } if( $@ ) { print "ERROR: $@" }
} }