Perl 学习手札之六: Loops

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的时候的用法;








原文地址:https://www.cnblogs.com/hanleilei/p/2358494.html