iphone has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I have the following commands which i need to run in perl.Should I use the `` and wrap everycommand in it and run or is there a better way?

batch -b -submit abcd.txt perlscript features.txt perldata data.txt

Replies are listed 'Best First'.
Re: Best way to execute a set of commands in perl
by ikegami (Patriarch) on Mar 08, 2011 at 09:03 UTC
    You presumably want to do error checking, so I recommend
    use IPC::System::Simple qw( system ); system($_) for 'batch -b -submit abcd.txt', 'perlscript features.txt', 'perldata data.txt';
    or
    use IPC::System::Simple qw( system ); system($_) for split /\n/ <<'__EOI__'; batch -b -submit abcd.txt perlscript features.txt perldata data.txt __EOI__

    IPC::System::Simple

    Update: Fixed name of module.

Re: Best way to execute a set of commands in perl
by cdarke (Prior) on Mar 08, 2011 at 11:33 UTC
    Only use back-ticks `` or qx if you are capturing the output in your perl script. Otherwise use system.

      I seem to get the following error when try to use a if statement along with qq?Can someone please advise?

      ERROR:- syntax error at perl.pl line 63, near "qq(p4 -x "$options{f}" delete) +if" Execution of Qdepot_upload.pl aborted due to compilation errors. system($_) for qq(p4 sync -k "$options{v}"), qq(p4 -x "$options{f}" delete) if (exists $options{f}), qq(p4 -x "$options{a}" add) if (exists $options{a}),
        This is a fairly obfuscated syntax you are trying to use, in my opinion. I can't really see the point in the for loop unless you have a large number of commands to execute. If that is the case, then I suggest that:
        my @cmds; push @cmds,qq(p4 sync -k $options{v}); push @cmds,qq(p4 -x $options{f} delete) if (exists $options{f}); push @cmds,qq(p4 -x $options{a} add) if (exists $options{a}); system($_) for @cmds;
        might be clearer.

        Otherwise, if you simply want to execute just those commands you show, then why not Keep It Simple, Sir?
        system(qq(p4 sync -k $options{v})); system(qq(p4 -x $options{f} delete)) if (exists $options{f}); system(qq(p4 -x $options{a} add)) if (exists $options{a});
        By the way, I suspect that no one replied to this question because they did not know you asked a new one. I only looked because I wanted to see if there was a response. Probably better to do a new post in future.