您的位置:寻梦网首页编程乐园Perl 编程Perl初级教程
Perl初级教程
perl控制结构(2)-循环控制

    循环性控制结构

  任何一种语言没有循环就是不完整的。Perl也是如此,它可以用while, do...while, for, until, foreach来实现。

  循环中还可以用last,next,redo等操作符进行控制。

  指令:

  while 当..

  语法:

  while(判别运算式) {

  程序叙述区块;

  }

  上个语法在Perl中也可以写成: 程序叙述区块while(判别运算式);
  
  范例一:

  while($〈=10)
  {

  $sum+=$i;
  $i++;

  }

  print"$sumn"; #此时$sum =55;

  范例二:

  $filename="/path/cgi.txt";
  open(FILE,"$filename")||die "Cannot open $filenamen";
  #可以把〈FILE〉视为打开文件某一行的数据
  while($line=〈FILE〉)
  {

  print "$line";

  }

  close(FILE);

  就会把cgi.txt这个文件的内容显示出来。

  而这个范例可以把它改写成:

  $filename="/path/cgi.txt";
  open(FILE,"$filename")||die "Cannot open $ filenamen";
  print "$line"while($line=〈FILE〉);
  close (FILE);

  在这个范例中是把$filename文件内的数据一行一行的指派给$line这个纯量变量,再把$line显示出来.如果没有将〈FILE〉指派给一个纯量变量的话,则会有一内定的输入变量$_被〈FILE〉所指派.因为$_是一个内定的变量,所以如果使用print函数的时候没有加上要输出数据的话,就会把$_的数据print出来.所以这个范例也可以改写成:   
  $filename="/path/cgi.txt";
  open(FILE,"$filename")Ⅱdie"Cannot open $ filenamen";
  while(〈FILE〉)
  {

  print;

  }

  close(FILE);

  指令:

  do while 当..

  语法:

  do
  {

  程序叙述区块;

  }while(判别运算式);

  在while和do while循环中最大的不同是在do while循环中,程序叙述区块至少会被执行一次。

  范例:

  do{

  $sum+=$i;
  $i++;

  }while($i〈=10);
  print "$sumn"; #此时$sum=55;

  指令:

  until 直到...才

  语法: until(判别运算式)
  {

  程序叙述区块;

  }

  上个语法在Perl中也可以写成: 程序叙述区块 until (判别运算式);

  范例:

  until($i〉10){

  $sum+=$i;
  $i++;

  }

  print "$sumn"; #此时$Sum=55;

  指令:

  do while 直到...才

  语法:

  do{

  程序叙述区块;

  }until (判别运算式);

  范例:

  do{

  $sum+=$i;
  $i++;
 
  }until($i〉10);

  print "$sumn"; #此时$sum=55;

  指令:

  for 循环陈述

  语法一:

  for (初始化运算式;判别运算式;循环过程运算式)
  {

  程序叙述区块;

  }

  范例一:

  $sum=0;
  for($i=1;$i〈=10;$i++)
  {
  $sum+=$i;
  }

  print "$sumn"; #此时$sum=55;

  范例二:

  @array=(3,6,9);
  $number=@array; #把数组@array的元素个数指派给$number
  #此时$number=3;
  for($i=0;$inumber;$i++)
  {
  $sum+=$array〔$i〕; #把数组@array元素的值全部加起来
  }

  print"$sumn"; #此时$sum=18;

  语法二:

  for $ variable(@array)
  {

  程序叙述区块;

  }

  在Perl语言中的for循环陈述还可以使用这个语法,各循环陈述foreach的用法一样.如果把$variable变量省略的话,就会将数组@array的元素一个一个指定给$_这个变量,这是比较精简的写法.

  范例:

  @array=(3,6,9);
  for $int(@array)
  {

  $sum+=$int;

  }

  print"$sumn"; #此时$sum=18;

  也可以写成:

  @array=(3,6,9);
  for (@array)
  {

  $sum+=$_;

  }

  print"$sumn"; #此时$sum=18;

  指令:

  foreach 循环陈述

  语法:

  foreach $ variable(@array)
  {

  程序叙述区块;

  }

  如果把$variable变量省略的话,就会将数组@array的元素一一指定给$_这个内定的输出变量.

  范例一:

  @array=(3,6,9);
  foreach $int(@array)
  {

  $sum+=$int;

  }

  print "$sumn"; #此时$sum=18;

  也可以定成:

  @array=(3,6,9);
  foreach(@array)
  {

  $sum+=$_;

  }

  print "$sumn"; #此时$sum=18;

  范例二:

  %FORM=("name","NCTU","value","TEM");
  foreach $pair(sort keys%FORM)
  {
 
  print "$pair is $FORM{pair}n";

  }

  这个范例在CGI语言写作中常常会用到.先用keys喧个函数来求出关联数组中全部的key,再用sort这个函数把全部的key由小到大排序,最后再把关联数组中的key和所对应的值(value)一一显示出来.而以上这个程序也可写成:

  %FORM=("name","NCTU","value","TEM");
  @array=(sort keys%FORM);
  foreach $pair(@array)
  {

  print "$pair is $FORM{pair}n";

  }

  指令:

  last 退出循环陈述
  语法:
  last
  范例:
  for($i=1;$i〈=10;$i++)
  {
  last if ($i==5); #如果$i等于5的话就退出for循环
  print"$in";
  }

  会把1到4之间的数值显示出来.

  指令:next 到循环的下一个陈述

  语法:next

  范例:

  for($i〈=10;$i++)
  {

  #如果是2的倍数的话,就到循环的下一个陈述
  next if($i%2)==0)

  print"$i是一个奇数!n";

  }

  会把1以10之间的奇数显示出来。

上一篇 目录 下一篇