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

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

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. Sample CODE:- use strict; use warnings; use IPC::System::Simple qw( system ); 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}),

Replies are listed 'Best First'.
Re: using if statement along with qq
by Eliya (Vicar) on Mar 09, 2011 at 22:40 UTC

    Syntactically, you need an expression here, not a statement, so you could use the ternary operator:

    ... for qq(p4 sync -k "$options{v}"), exists $options{f} ? qq(p4 -x "$options{f}" delete) : (), exists $options{a} ? qq(p4 -x "$options{a}" add) : (),
Re: using if statement along with qq
by chrestomanci (Priest) on Mar 09, 2011 at 22:45 UTC

    Looking at your code, it looks like you are attempting to run a for loop, in simplified form it is:

    system($_) for @command_list;

    Without the if statements on the ends of some lines, everything is fine, and it does not matter what form of quoting you use to define the commands in your list.

    However, when you add the if statement on the end of some lines, then it is syntax error, as you are trying to nest two things where they can't be nested.

    There are two ways you could rewrite this. You could build the command list, by conditionally adding elements to it:

    my @cmd_list; push @cmd_list, qq(p4 sync -k "$options{v}"); push @cmd_list, qq(p4 -x "$options{f}" delete) if (exists $options{f}) +; # ... etc. system $_ foreach @cmd_list;

    Or you could just run the commands conditionally:

    system qq(p4 sync -k "$options{v}"); system qq(p4 -x "$options{f}" delete) if (exists $options{f}); # ... etc.