O'Reilly logo

Perl for Web Site Management by John Callender

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

foreach Loops

The next part of the script introduces one of those things that seem really obvious to programmers, but can cause nonprogrammers some confusion until they figure out what’s going on. I’m talking about loops. In this case, a loop created with Perl’s foreach function.

The idea with a loop is to make a block of programming code that performs a specific set of actions, then feed it a series of thingies for processing. It’s somewhat like an assembly line, and like an assembly line it’s really efficient for the programmer because she has to write the code block only once, but can easily make the program run thousands or millions of thingies through it. The illusion of power this produces is part of why people become addicted to programming and stay up all night debugging code.

Anyway, here’s the next chunk of code from the script, showing the foreach loop in action:

# bundle up form submissions into a mail_body

$mail_body = '';

foreach $field (param) {
    foreach $value (param($field)) {
        $mail_body .= "$field: $value\n";
    }
}

First off, we assign the empty string (that is, nothing) to a scalar variable called $mail_body. You’re probably thinking that’s a somewhat silly thing to do, and you’re right, it is rather silly, at least from the perspective of the behavior of the script. If the $mail_body variable had previously existed in the script and had contained something already, this line would actually do something because it would empty out the contents of the variable. But ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required