The Naked Block Control Structure

The so-called “naked" block is one without a keyword or condition. That is, suppose you start with a while loop, which looks something like this:

    while (condition) {
      body;
      body;
      body;
    }

Remove the while keyword and the conditional expression, and you’ll have a naked block:

    {
      body;
      body;
      body;
    }

The naked block is like a while or foreach loop, except that it doesn’t loop; it executes the body of the loop once, and it’s done. It’s an un-loop!

You’ll see other uses for the naked block, but one of its features is providing a scope for temporary lexical variables:

    {
      print "Please enter a number: ";
      chomp(my $n = <STDIN>);
      my $root = sqrt $n;  # calculate the square root
      print "The square root of $n is $root.\n";
    }

In this block, $n and $root are temporary variables scoped to the block. As a general guideline, all variables should be declared in the smallest scope available. If you need a variable for a few lines of code, you can put those lines into a naked block and declare the variable inside that block. If you need the value of $n or $root later, you will need to declare them in a larger scope.

You may have noticed the sqrt function in that code and wondered about it; yes, we haven’t shown this function before. Perl has many built-in functions beyond the scope of this book. When you’re ready, check the perlfunc manpage to learn about more of them.

Get Learning Perl, Fourth Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.