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

Hello every one !!!!

I was doing the following code

if defined param('end_date'){$user_input->{end_date} = param('end_date +')}; else $user_input->{end_date} = param('start_date');

And I was getting the compilation error as follows

yntax error at /var/www/cgi-bin/post.cgi line 21, near "if defined"

Execution of /var/www/cgi-bin/post.cgi aborted due to compilation errors.

can anybody give me correct syntax for it ???

Thanks in advance !!!!

Replies are listed 'Best First'.
Re: syntax of defined
by moritz (Cardinal) on Mar 09, 2010 at 22:21 UTC
    In Perl 5 you need parenthesis directly after the 'if', and curlies both after if and else:
    if (defined param('end_date')) { ... } else { ... }

    see perlintro, perlsyn.

    (In Perl 6 you can omit the parenthesis)

      In Perl 5 you need parenthesis directly after the 'if',

      Except if you use the if statement modifier

      bar() if foo();

      Mind you, the statement modifier wouldn't be useful here. The condition operator, on the other hand, would be useful.

      $user_input->{end_date} = defined(param('end_date')) ? param('end_date') : param('start_date');

      Mind you, param('end_date') can still be called twice for nothing. The following doesn't:

      $user_input->{end_date} = param('end_date'); $user_input->{end_date} = param('start_date') if !defined($user_input->{end_date});
      Since 5.10, the above can be simplified to the following:
      $user_input->{end_date} = param('end_date') // param('start_date');
      The following isn't strictly equivalent, but should do the trick if you want something similar while still supporting earlier versions of Perl:
      $user_input->{end_date} = param('end_date') || param('start_date');
Re: syntax of defined
by MidLifeXis (Monsignor) on Mar 10, 2010 at 15:25 UTC
    if defined param('end_date'){$user_input->{end_date} = param('end_date +')};

    In addition to the other comments, the };, while not syntactically wrong, is probably not what you mean. Read on...

    else $user_input->{end_date} = param('start_date');

    This, on the other hand, is quite wrong. With the closing }; on the if, the else no longer has meaning. Also, it should be else {..._date');}.

    It is said that "only perl can parse Perl." I don't even come close until my 3rd cup of coffee. --MidLifeXis