Connecting Tech Pros Worldwide Forums | Help | Site Map

Inverted syntax for an if conditional

Mark Hobley
Guest
 
Posts: n/a
#1: Apr 22 '06
I have some information that states that the if conditional can be be inverted
from the traditional syntax

if (EXPRESSION) BLOCK

to an alternative syntax:

if BLOCK (EXPRESSION);

I have a simple line of code:

if ($guess == 6) { print 'Wow! Lucky Guess!'; }

However, when I try to invert this, I get a syntax error:

{ print 'Wow! Lucky Guess!'; } if ($guess == 6); # Syntax error

Why does this not work?

The example is academic, and I don't intend to code with the inverted syntax.
I am just trying to get an understanding for the purpose of producing
documentation.

Thanks in advance to anyone who can help.

Regards,

Mark.

--
Mark Hobley
393 Quinton Road West
QUINTON
Birmingham
B32 1QE

Telephone: (0121) 247 1596
International: 0044 121 247 1596

Email: markhobley at hotpop dot donottypethisbit com

http://markhobley.yi.org/


Jürgen Exner
Guest
 
Posts: n/a
#2: Apr 22 '06

re: Inverted syntax for an if conditional


Mark Hobley wrote:[color=blue]
> I have some information that states that the if conditional can be be
> inverted from the traditional syntax
>
> if (EXPRESSION) BLOCK
>
> to an alternative syntax:
>
> if BLOCK (EXPRESSION);[/color]

Did you mean
BLOCK if (EXPRESSION);

Anyway, both are wrong. Why don't you check the documenation?
From "perldoc perlsyn":

Any simple statement may optionally be followed by a *SINGLE* modifier,
just before the terminating semicolon (or block ending). The possible
modifiers are:
if EXPR

I can only guess that this is what you were looking for.
[color=blue]
> However, when I try to invert this, I get a syntax error:
> { print 'Wow! Lucky Guess!'; } if ($guess == 6); # Syntax error[/color]

Because a block is not a simple statement. Did you try
print 'Wow! Lucky Guess!' if ($guess == 6);

jue


Justin C
Guest
 
Posts: n/a
#3: Apr 22 '06

re: Inverted syntax for an if conditional


On 2006-04-22, Mark Hobley <markhobley@hotpop.deletethisbit.com> wrote:[color=blue]
> I have some information that states that the if conditional can be be inverted
> from the traditional syntax
>
> if (EXPRESSION) BLOCK
>
> to an alternative syntax:
>
> if BLOCK (EXPRESSION);
>
> I have a simple line of code:
>
> if ($guess == 6) { print 'Wow! Lucky Guess!'; }
>
> However, when I try to invert this, I get a syntax error:
>
> { print 'Wow! Lucky Guess!'; } if ($guess == 6); # Syntax error
>
> Why does this not work?
>
> The example is academic, and I don't intend to code with the inverted syntax.
> I am just trying to get an understanding for the purpose of producing
> documentation.[/color]

This works for me:

#!/usr/bin/perl
my $guess=6;
print "Wow! Lucky guess!\n" if ( $guess == 6 ) ;

(followups set)


Justin.

--
Justin C, by the sea.
Mark Hobley
Guest
 
Posts: n/a
#4: Apr 22 '06

re: Inverted syntax for an if conditional


In alt.perl Mark Hobley <markhobley@hotpop.deletethisbit.com> wrote:[color=blue]
>
> { print 'Wow! Lucky Guess!'; } if ($guess == 6); # Syntax error
>
> Why does this not work?
>[/color]

I have also discovered some more weird behaviour, this time using the syntax:

STATEMENT [, STATEMENT ], if EXPRESSION;

If I use:

print 'I should be so lucky!', print 'Chucky!', print 'Mucky!', print
'Clucky!', if ($guess == 6);

The statements run in reverse order, and I get number ones inserted in the
output:

Clucky!Mucky!1Chucky!1I should be so lucky!1

Regards,

Mark.

--
Mark Hobley
393 Quinton Road West
QUINTON
Birmingham
B32 1QE

Telephone: (0121) 247 1596
International: 0044 121 247 1596

Email: markhobley at hotpop dot donottypethisbit com

http://markhobley.yi.org/

Mark Hobley
Guest
 
Posts: n/a
#5: Apr 22 '06

re: Inverted syntax for an if conditional


In alt.perl "Jürgen Exner" <jurgenex@hotmail.com> wrote:[color=blue]
> Mark Hobley wrote:[/color]
[color=blue]
> Did you mean
> BLOCK if (EXPRESSION);[/color]

Oops, yes I did. That was a typing error.
[color=blue]
> Anyway, both are wrong. Why don't you check the documenation?
> From "perldoc perlsyn":
>
> Any simple statement may optionally be followed by a *SINGLE* modifier,
> just before the terminating semicolon (or block ending). The possible
> modifiers are:
> if EXPR
>
> Because a block is not a simple statement. Did you try
> print 'Wow! Lucky Guess!' if ($guess == 6);
>[/color]

Yeah that works.

A professional programming guide tells me that the following forms of if
statement are legal in Perl:

STATEMENT if EXPRESSION;

STATEMENT, STATEMENT ... if EXPRESSION;

BLOCK if EXPRESSION;

Presumably there is a mistake in the text, and BLOCK if EXPRESSION should be
omitted from this list, because STATEMENT if EXPRESSION works, but
BLOCK if EXPRESSION appears not to.

Regards,

Mark.

--
Mark Hobley
393 Quinton Road West
QUINTON
Birmingham
B32 1QE

Telephone: (0121) 247 1596
International: 0044 121 247 1596

Email: markhobley at hotpop dot donottypethisbit com

http://markhobley.yi.org/

Jürgen Exner
Guest
 
Posts: n/a
#6: Apr 22 '06

re: Inverted syntax for an if conditional


Mark Hobley wrote:[color=blue]
> I have also discovered some more weird behaviour,
> print 'I should be so lucky!', print 'Chucky!', print 'Mucky!', print
> 'Clucky!', if ($guess == 6);
>
> The statements run in reverse order, and I get number ones inserted
> in the output:
>
> Clucky!Mucky!1Chucky!1I should be so lucky!1[/color]

Nothing weird at all.
If you add explicit paranthesis then it's obvious what's going on:

print ('I should be so lucky!',
(print 'Chucky!',
(print 'Mucky!',
print ('Clucky!')
)
)
)

The injected digits '1' are just the return value 'true' of the inner
print() statements, e.g. for the outmost you will get eventually

print ('I should be so lucky!', 1)

I suggest you read the documentation for the functions that you are using.
"perldoc -f print":

print Prints a string or a list of strings. Returns true if
successful.


jue


Randal L. Schwartz
Guest
 
Posts: n/a
#7: Apr 22 '06

re: Inverted syntax for an if conditional


>>>>> "Mark" == Mark Hobley <markhobley@hotpop.deletethisbit.com> writes:

Mark> A professional programming guide tells me that the following forms of if
Mark> statement are legal in Perl:

Mark> STATEMENT if EXPRESSION;

Mark> STATEMENT, STATEMENT ... if EXPRESSION;

Mark> BLOCK if EXPRESSION;

Mark> Presumably there is a mistake in the text, and BLOCK if EXPRESSION should be
Mark> omitted from this list, because STATEMENT if EXPRESSION works, but
Mark> BLOCK if EXPRESSION appears not to.

That's really wrong.

It's:

EXPRESSION if EXPRESSION;

or

if (EXPRESSION) BLOCK

where BLOCK is:

{ STATEMENT STATEMENT ... STATEMENT }

and STATEMENT is:

EXPRESSION;

and many other things.

--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!
*** Posted via a free Usenet account from http://www.teranews.com ***
Ch Lamprecht
Guest
 
Posts: n/a
#8: Apr 23 '06

re: Inverted syntax for an if conditional


Mark Hobley wrote:

[color=blue]
> A professional programming guide tells me that the following forms of if
> statement are legal in Perl:
>
> STATEMENT if EXPRESSION;
>
> STATEMENT, STATEMENT ... if EXPRESSION;
>
> BLOCK if EXPRESSION;
>
> Presumably there is a mistake in the text, and BLOCK if EXPRESSION should be
> omitted from this list, because STATEMENT if EXPRESSION works, but
> BLOCK if EXPRESSION appears not to.[/color]

do BLOCK if EXPRESSION


perldoc -f do

Regards,
Christoph
--

perl -e "print scalar reverse q/ed.enilno@ergn.l.hc/"
Closed Thread