loops are used for repeating code
eg: while(condition){
statement1;
statement2;
}
perl provide two basic types of loops
while/until loops
for/foreach loops
while.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
open(FH, "linesfile.txt");
while(my $line = <FH>){
# message("$line");
print $line;
}
close FH;
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
first setup a file named linesfile.txt, which content is:
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
until.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
my $line;
open(FH, "linesfile.txt");
#until(($line=<FH>)=~/3/){
# message("$line");
#}
message("$line") until ($line=<FH>)=~/3/;
close FH;
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
this script will print the content of file linesfile.txt until the script match 3
foreach.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
my @list= ("one","two","three","four","five");
# foreach my $s (@list){
# message($s);
# }
# foreach (@list){
# message($_);
# }
message($_) foreach @list;
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
注意注释掉的部分,写法和之前的condition语句一样。
loop.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
my @list= ("one","two","three","four","five");
my $i;
for($i=0;$list[$i];$i++){
message($list[$i]);
}
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
C分格的for 循环写法
control.pl
#!/usr/bin/perl
# loops.pl by Bill Weinman <http://bw.org/contact/>
# Copyright (c) 2010 The BearHeart Group, LLC
#
use strict;
use warnings;
main(@ARGV);
sub main
{
open(FH, "linesfile.txt");
while(my $line=<FH>){
#last if $line =~/3/;
next if $line =~/3/;
print $line;
}
close FH;
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
注意注释掉的部分,在使用last和next的时候,得到的结果的不同。
profix.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
my $line='';
open(FH, "linesfile.txt");
#print while(<FH>);
#print $_ while($_=<FH>);
print $line=<FH> until($line=~/3/);
close FH;
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
注意:注释的两行得到的结果是等价的,这里描述了$_的用法。
profix2.pl
#!/usr/bin/perl
use strict;
use warnings;
main(@ARGV);
sub main
{
my @list = ('one','two','three','four','five');
print "$_\n" foreach @list;
}
sub message
{
my $m = shift or return;
print("$m\n");
}
sub error
{
my $e = shift || 'unkown error';
print("$0: $e\n");
exit 0;
}
在用到foreach的时候的用法;