--- Rob Dixon <[EMAIL PROTECTED]> wrote:
> Paul wrote:
> > >     do {
> > >         my $empty;
> > >         $empty ++;
> > >     };
> >
> > Also, the do() is superfluous here, isn't it?
> 
> I was trying to show something that would return a value in
> the same way as a subroutine block (so that I didn't need a
> return statement in the same way as a subroutine doesn't).
> I started out with a bare block, but realised that it needed
> a 'do' to have a value, and therefore make it non-redundant
> in context.

Got it.

  my $x = { code, more code.... }

doesn't work, because the braces are expecting to be an anonymous hash
in that context, so they aren't a block.

  my $x = do { code };

works, because do flips the context, expecting a block and returning a
value. That way I can say

  my $fh = do { local $_ };
  open $fh, $file or die $!;

for a cheap, quick, anonymous filehandle in a scalar. :)
(note to the peanut gallery: henceforward I digress!)

I've definitely used that trick...but all in all, for that *particular*
usage I recommend

  use FileHandle;
  my $fh = new FileHandle $file or die $!;

which is much more readable to the uninitiated, and still only two
lines of code. ;o]



__________________________________________________
Do you Yahoo!?
Yahoo! Shopping - Send Flowers for Valentine's Day
http://shopping.yahoo.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to