open(OUTPUT, " > eol_dos.out") or die $!;
print OUTPUT <<EOL;
dir
EOL
>ver
Microsoft Windows XP [Version 5.1.2600]
>perl a.pl && type eol_dos.out
dir
open(OUTPUT, " > eol_dos.out") or die $!;
print OUTPUT <<EOL;
ls -1
EOL
$ uname
Linux
$ perl a.pl && cat eol_dos.out
ls -1
The sqlplus is working on *nix but not on Windows
No. Like I said in my previous post, your sh shell command works in sh but not in cmd.
I do not want to fork a separate shell as well so I took it off the bash.
But that's you're doing. You're asking Perl to execute shell command
sqlplus -S "/as sysdba" <<"SQLEND"
set heading off
alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS'
;
select 'Connected to the database on ' || sysdate
from dual
;
SQLEND
so it launches a shell to execute it.
Any suggestion on the sqlplus thing for Windows will be very much appreciated.
Yes, stop invoking the shell. Create a pipe to sqlplus and pipe the data to it instead of asking the shell to do that.
Ideally, that would be
my @cmd = (
sqlplus => (
'-S',
'/as' => 'sysdba',
)
);
open(my $to_sqlplus, '|-', @cmd)
or die("Can't launch sqlplus: $!\n");
print $to_sqlplus <<'__EOI__';
...
__EOI__
close($to_sqlplus);
But no-one has gotten around to implementing multi-arg open |-. So you can use
use IPC::Open2 qw( open2 );
my @cmd = (
sqlplus => (
'-S',
'/as' => 'sysdba',
)
);
local *TO_SQLPLUS;
my $pid = open2('>&STDOUT', *TO_SQLPLUS, @cmd)
or die("Can't launch sqlplus: $!\n");
print TO_SQLPLUS <<'__EOI__';
...
foo
bar
...
__EOI__
close(TO_SQLPLUS);
waitpid($pid,0);
BTW, out of curiosity, do you type in your comments/reply typing <p> and </p> manually as well?
Yes. Well not </p>. It's optional in HTML.
|