For Programmers: Free Programming Magazines  


Home > Archive > PERL Beginners > August 2004 > question about ( () if () ) while ();









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author question about ( () if () ) while ();
William M West

2004-08-03, 3:57 pm


$ perl -e ' $entry = "willy"; (print "1") if (/$entry/) while ($_ = "will");
print "0"'
syntax error at -e line 1, near ") while"
Execution of -e aborted due to compilation errors.




seperating the bits seems to work. it seems to break down when i want to
use the if statement in combination with the while.


using print to simulate return values.


perhaps i should abandon this idiom and use a normal

while () {
if () {

}
}


i am curious as to why this error crops up...


thanks,



willy
http://www.hackswell.com/corenth

Jeff 'Japhy' Pinyan

2004-08-03, 3:57 pm

On Aug 3, West, William M said:

>$ perl -e ' $entry = "willy"; (print "1") if (/$entry/) while ($_ = "will");
>print "0"'
>syntax error at -e line 1, near ") while"
>Execution of -e aborted due to compilation errors.


Check 'perldoc perlsyn'. It explains that the "statement modifiers",
things like '... if CONDITION' and '... while CONDITION' are only allowed
after *simple* statements -- what they really should say is "expressions".

You're allowed to write

print 1 if /willy/;

because 'print 1' is an expression. You can't write

print 1 if /willy/ while <FILE>;

because 'print 1 if /willy' is not an expression, it's a statement.

--
Jeff "japhy" Pinyan % How can we ever be the sold short or
RPI Acacia Brother #734 % the cheated, we who for every service
http://japhy.perlmonk.org/ % have long ago been overpaid?
http://www.perlmonks.org/ % -- Meister Eckhart

William M West

2004-08-03, 3:57 pm


>Check 'perldoc perlsyn'. It explains that the "statement modifiers",
>things like '... if CONDITION' and '... while CONDITION' are only allowed
>after *simple* statements -- what they really should say is "expressions".
>
>You're allowed to write
>
> print 1 if /willy/;
>
>because 'print 1' is an expression. You can't write
>
> print 1 if /willy/ while <FILE>;
>
>because 'print 1 if /willy' is not an expression, it's a statement.
>


well, this restriction has forced me to come up with:

perl -e ' $entry = "willy"; (print /$entry/) while ($_ = "wil"); print "0"'


in this test it ends up not getting to print "0", but with a match it works
great :) i can apply it properly now when substituting a filehandle for
the expression in the while.


thank you!

>--
>Jeff "japhy" Pinyan % How can we ever be the sold short or
>RPI Acacia Brother #734 % the cheated, we who for every service
>http://japhy.perlmonk.org/ % have long ago been overpaid?
>http://www.perlmonks.org/ % -- Meister Eckhart

Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com