use strict; use warnings; my $TEMP1; my $OLD_STDOUT_HANDLE; my $NEW_STDOUT_HANDLE; open NEW_STDOUT_HANDLE, ">&STDOUT"; close STDOUT; open STDOUT, ">", \$TEMP1; open my $pipe_fh, '|-', "sqlplus.exe -s scott/tiger\@butthead" or die "Can't open pipe: $!"; print {$pipe_fh} <<"END_OF_SQL" set echo off set lines 1000 set trims on set serverout on size 999999 set feed off exec dbms_output.put_line('Hello There'); exit; END_OF_SQL ; close $pipe_fh; close STDOUT; open STDOUT, ">&NEW_STDOUT_HANDLE"; print "6.\n"; print $TEMP1;