设为首页收藏本站language 语言切换
查看: 1422|回复: 0
收起左侧

如何利用程序循环来控制Perl脚本流程

[复制链接]
发表于 2010-2-24 13:39:25 | 显示全部楼层 |阅读模式
<>了解<U><STRONG>erl</STRONG></U>语句、变量和运算符的基础知识,并建立第一个简单的程序后,您希望进一步深入<U><STRONG>学习</STRONG></U>。您能学会的最重要的一项内容是控制Perl程序流程——例如,根据不同的情况分离代码,或重复运行代码块,对一个特定的数据组进行全面探查。</P><>本文将介绍后一种情况,为您说明允许您重复执行一组Perl语句的各种Perl结构。这种重复执行叫做循环,这些循环在大多数Perl脚本中发挥着重要作用。下面我们来进行说明。</P><><STRONG>While循环<BR></STRONG>erl中最基本的循环为所谓的while()循环,它允许您在一个特定的条件保持为真的情况下,重复执行一组语句。这个条件是一个标准的Perl条件表达式,可由解析器计算它的值,再返回真或假值。下面是一个简单的例子(列表A):</P><><FONT color=#ff0000>列表A</FONT></P><>#!/usr/bin/perl</P><># define number array</P><>@nums = (1..18);</P><># define counter</P><>$count = 0;</P><># run loop while number is less than 12</P><>while ($nums[$count] &lt; 12) {</P><>print $nums[$count];</P><>$count++;</P><>}</P><>在这个例子中,只要范围内的数字小于12,就将它打印出来。数值到12时,条件表达式不再得到满足,所以不再打印数字。</P><>下面是另一个更加实用的例子(列表B):</P><><FONT color=#ff0000>列表B</FONT></P><>#!/usr/bin/perl</P><># define variables</P><>$fact = 1;</P><>$num = 5;</P><># calculate_and_print the factorial</P><>while($num &gt; 1){</P><>$fact = $fact * $num;</P><>$num--;</P><>}</P><>print $fact;</P><>这个例子用while()循环由5倒数至1,每个阶段的值与前一个阶段得到的值相乘。最后,终值为5的阶乘,或120。</P><><STRONG>Until循环<BR></STRONG>与while()循环相反的是until()循环,直到某个特定的条件为假前,循环一直执行。因此,until()循环中的条件表达式与while()循环中的表达式正好相反。下面是一个例子(列表C):</P><><FONT color=#ff0000>列表C</FONT></P><>#!/usr/bin/perl</P><># define number array</P><>@nums = (1..18);</P><># define counter</P><>$count = 0;</P><># run loop while number is less than 12</P><>until ($nums[$count] &gt;= 12) {</P><>print $nums[$count];</P><>$count++;</P><>}</P><>我们还可以用until()循环重写阶乘的例子,如列表D所示:</P><><FONT color=#ff0000>列表D</FONT></P><>#!/usr/bin/perl</P><># define variables</P><>$fact = 1;</P><>$num = 5;</P><># calculate_and_print the factorial</P><>until($num &lt; 1){</P><>$fact = $fact * $num;</P><>$num--;</P><>}</P><>print $fact;</P><><STRONG>For循环<BR></STRONG>它是Perl中最常用的循环之一,for()循环用来重复执行一个代码块,执行的次数预先指定。这个循环通过一个计数器变量运行,变量被初始化为一个特定的值。接下来,对一个条件表达式进行测试,如果结果为真,就执行代码块,变量递增(或递减)。不断执行代码,直到表达式结果为假。</P><>列表E是一个简单的例子:</P><><FONT color=#ff0000>列表E</FONT></P><>#!/usr/bin/perl</P><># define number array</P><>@nums = (1..18);</P><># run loop while number is less than 12</P><>for ($x=0; $x&lt;11; $x++) {</P><>print $nums[$x];</P><>}</P><>在这个例子中,循环计数器的初始值为0。接下来,对条件表达式进行测试,如果结果为真,就打印相应的数列元素。计数器递增,为下一个循环做准备。这一过程一直持续到第12个数列元素,这时条件表达式的结果为假,循环被终止。</P><>也可以用for()循环重写阶乘的例子,如列表F所示:</P><><FONT color=#ff0000>列表F</FONT></P><>#!/usr/bin/perl</P><># define variables</P><>$fact = 1;</P><>$num = 5;</P><># calculate_and_print the factorial</P><>for ($x=5; $x&gt;1; $x--) {</P><>$fact = $fact * $x;</P><>}</P><>print $fact;</P><>这个稍有不同,因为每次循环计数器变量不是递增,而是递减。这样就可以由5倒数至1,这时条件表达式为假,循环终止。$fact的结果值为5的阶乘。</P><><STRONG>Foreach循环<BR></STRONG>Foreach循环是一个有些特殊的循环——只有Perl的数组变量能够使用这个循环。该循环可以方便地重复数组的每一个元素,依次对它们进行处理。列表G是一个例子:</P><><FONT color=#ff0000>列表G</FONT></P><>#!/usr/bin/perl</P><># define number array</P><>@nums = (1..18);</P><># iterate through array elements</P><>foreach $n (@nums) {</P><>print "$n ";</P><>}</P><>这里,foreach()循环结构被提交给一个数组变量,在这个例子中它包含18个元素。循环每重复一次,当前选中的元素被分配给临时变量$n,并以某种方式进行处理(在本例中简单在终端打印)。循环继续进行,直到所有的数组元素按顺序处理完毕。</P><>在处理数组时,foreach()循环要大大优于for()循环和while()循环,主要是因为它不需要一个计数器变量手工追踪它在数组中的位置;这个任务在内部进行处理,使这一循环在处理数组时简单而透明。</P><><STRONG>常用循环<BR></STRONG>这四个循环是Perl中最常用的循环——很少有脚本不会用到它们。希望上面的简短实例与说明能够帮助您了解它们,并开始在实际实践中加以应用。编码快乐!</P>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-30 09:22 , Processed in 0.448801 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表