in reply to {} vs do{}

You can use a naked block anywhere. One good reason to is to limit the scope of lexical variables:

{ # file is not world readable! my $password = 'my_secret'; sub my_privy { # do private things } }
do BLOCK; returns the value of the last expression evaluated, so assignment becomes possible:

my $val = do { # valuable stuff };

When used with modifier while or until the do block is evaluated once before the condition is tested.

After Compline,
Zaxo

Replies are listed 'Best First'.
Re: Re: {} vs do{}
by simon.proctor (Vicar) on Jul 04, 2001 at 13:46 UTC
    The two most common methods of these that I use are as follows:
    {} :
    I use this to slurp files ie:
    { local $/ = undef; $data = <FH>; }
    The anonymous block allows me to change the record separator locally and slurp the file in one go without impacting the rest of my program. This is simply another example of scoping as with the previous post. Note you'll have to open the file first etc....
    do:
    I use do mainly in two cases. To dynamically load Perl modules in my servers and to implement switch style code (see perl.com for examples). ie.. assuming $_ has our test variable
    . . . . . . . /^test$/ && do { } . . . . . . .
    That was a bit cryptic (sorry) but the explanation on perl.com is much better than what I could write so please look there. Hope that gives you an idea of applications as well as differences!