ch41 06


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:
ch41
CH41 (2)
ch41
ch41
ch41
ch41
ch41 (3)
ch41
ch41
ch41
ch41
ch41
ch41
CH41
ch41
ch41
ch41
ch41

więcej podobnych podstron