Perl Boot Camp, Part 3: Branching and Looping (Unix Power Tools, 3rd Edition)
41.6. Perl Boot Camp, Part 3: Branching and Looping
To do any
interesting stuff with data, Perl needs to be able to branch and
loop. Perl supports the C-like
if-then-else
construct, as the following shows:
if ( $password eq 'secret' ) {
print "Come on in\n";
} else {
print "Incorrect password\n";
}
You can also invert simple tests that only have one statement in the
then block.
print "Don't I know you?\n" if $user eq 'joe';
You can invert the logic of if by using
unless:
print "Please supply command line arguments\n" unless @ARGV;
The print happens only if @ARGV
is empty.
Sometimes you need to
iterate through each element of a list. This can be done with the
foreach loop:
foreach my $thing (@my_room) {
print "dusting $thing\n";
dust($thing);
}
A synonym for foreach is
for. Bourne shell hackers (or those who
don't like typing) may feel more comfortable using
for rather than then foreach.
Each time through the loop, $thing is aliased to
the next element in @my_room. Any change to
$thing will change that element in the array, so
be careful. If you don't supply a scalar variable
like $thing, Perl will set
$_ for you each time through the loop. The
previous example could also be written:
foreach (@my_room) {
print "dusting $_\n";
dust($_);
}
Sometimes you need to continue looping while an event is happening,
like reading input from standard input:
while ( my $line = <STDIN> ) {
print "I got: $line";
}
Each
line of input a user provides is stored in $line,
including the newline at the end. When the user hits the end-of-file
control key (CTRL-D), the loop exits. Like the
foreach loop, you can leave off the scalar
variable while reading from a filehandle,[124] and $_
will be set to the next line of input each time through the loop.
[124]STDIN is
normally assumed here.
while (<>) {
print "I got: $_";
}
Sometimes you need to interrupt
the execute flow of your loop. Perl gives you three operators to do
that (see Table 41-7).
Table 41-7. Loop flow-control operators
Operator
Example
Description
next
while(<>){
next if $_ ne "continue\n";
}
Jump to the top of the loop and iterate normally
last
while(<>){
last if $_ eq "quit\n"
}
Jump out of the loop to the next line of the program
redo
for $url (@urls){
unless( $content = get($url) ){
print "couldn't fetch page - retrying\n";
redo;
}
}
Jump to the top of the loop, but don't evaluate the
loop condition
-- JJ
41.5. Perl Boot Camp, Part 2: Variables and Data Types41.7. Perl Boot Camp, Part 4: Pattern Matching
Copyright © 2003 O'Reilly & Associates. All rights reserved.
Wyszukiwarka
Podobne podstrony:
ch41CH41 (2)ch41ch41ch41ch41ch41 (3)ch41ch41ch41ch41ch41ch41CH41ch41ch41ch41ch41więcej podobnych podstron