cheng029 发表于 2015-12-28 13:17:19

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


  
页: [1]
查看完整版本: Perl 学习手札之六: Loops