There is a way you can avoid declaring $bar once and assining it an other time:

use strict; my $foo = 1; { my $bar = do { if ($foo) { "true"; } }; print $bar; }

You still need a pair of braces around the whole construct. If you want $bar to be local, you need a block, how else would perl know where the variable is local.

The block is not ugly imo. I often use blocks in perl just to declare local variables. There is a way to avoid such blocks, but that involves changing programming style: you have to write short (50 lines most) subroutines that do one thing and do it well, and you can declare local variables at the top of each subroutine, with one my() statement perl sub (and preferable at most 7 variables). This is a good programming style in C imo (see Documentation/CodingStyle in the linux source), but doesn't always worth in Perl.

This is a bit OT, but note that I write the curlies of a block inline if the block contains only one line of code.


In reply to Re: A cleaner way of scoping variables by ambrus
in thread A cleaner way of scoping variables by bradcathey

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.