in reply to Why does this even compile?

I thought you knew this trick ;)
C:\>perl -MO=Deparse -wl #! perl -wl use strict; for my $i (1 .. 10) { print $i; } cxontinue { print "#"; print "-"; } __END__ foreach my $i (1 .. 10) { print $i; } do { print '#'; print '-' }->cxontinue; - syntax OK
update: I could've sworn you didn't have that deparse stuff there a second ago, anyway, I suppose it's just indirect object notation ie ---> new CGI; eq CGI->new; --->new {'CGI'} eq CGI->new;.

`perldoc perlobj' has an example, and here it is ;)

    $fred = find Critter "Fred";
    display $fred 'Height', 'Weight';
These could be combined into one statement by using a BLOCK in the indirect object slot:
display {find Critter "Fred"} 'Height', 'Weight';
For C++ fans, there's also a syntax using -> notation that does exactly the same thing. The parentheses are required if there are any arguments.
$fred = Critter->find("Fred"); $fred->display('Height', 'Weight');
or in one statement,
Critter->find("Fred")->display('Height', 'Weight');

MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
** The third rule of perl club is a statement of fact: pod is sexy.

Edit by tye, take paragraphs, long lines out of PRE

Replies are listed 'Best First'.
Re: Re: Why does this even compile?
by bart (Canon) on Sep 20, 2003 at 09:45 UTC
    So the indirect object notation makes a word plus a bare block be treated as a do BLOCK in normal OO notation? Eww. I was going to ask where this was good for, but you just supplied an example.

    Oh BTW, you can have the same problem if you mistype "else". If this block is the last thing in an enclosing block, it'll compile.

    #! perl -wl use strict; my $x = 1; if($x) { print "yes"; } esle { print "no"; }

    Result:

    Can't call method "esle" without a package or object reference at test +.pl line 6. yes no
Re: Re: Why does this even compile?
by bart (Canon) on Sep 20, 2003 at 08:26 UTC
    Yes I do. It shows what Perl makes of it, but still it makes no sense. Why does perl treat a code block as if it was a package/object reference?

      It's not treating the block as if it were a package name or object. It's treating the block as if it returned a package name or an object.