in reply to Re: System call doesn't recognise '>'
in thread System call doesn't recognise '>'

my @array = ($command, $arg1, $arg2, $arg3); system ('@array > $outfile');

Results in:

Can't spawn "cmd.exe": No such file or directory at D:\advanced_programming\test_syscall.pl line 11.

Replies are listed 'Best First'.
Re^3: System call doesn't recognise '>'
by Corion (Patriarch) on Dec 10, 2008 at 21:58 UTC
    system ('@array > $outfile');

    That line doesn't do what you think it does. Single quotes don't interpolate. You want to use double quotes and you want to check the return code of system():

    system( "@array > $outfile" ) == 0 or die "Couldn't launch [@array > $outfile]: $!/$?";
      my @array = ($command, $arg1, $arg2, $arg3); system( "@array > $outfile" ) == 0 or die "Couldn't launch [@array > $outfile]: $!/$?";

      Results in:

      Can't spawn "cmd.exe": No such file or directory at D:\advanced_progra +mming\test_syscall.pl line 29. Couldn't launch [C:\clover\clover.exe D:\advanced_programming\vb_van_m +otif.dat D:\advanced_programming\test.fa D:\advanced_programming\back +ground.fa > C:\clover\out.txt]: No such file or directory/65280 at D: +\advanced_programming\test_syscall.pl line 29.

      Again: If I paste the string C:\clover\clover.exe D:\advanced_programming\vb_van_motif.dat D:\advanced_programming\test.fa D:\advanced_programming\background.fa > C:\clover\out.txt in command line cmd.exe , it returns perfect output to the out.txt file.

        Perl starts all programs through cmd.exe (or whatever the local shell is) when it finds one of <>| in the command to execute. As we've established, cmd.exe is not in your path. You won't be able to launch any program with redirection through system until you fix that. Also read system which also tells you that.

Re^3: System call doesn't recognise '>'
by ikegami (Patriarch) on Dec 10, 2008 at 22:55 UTC
    I'd be surprised if there was a file named @array...