⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 perl 语言-perl 中文教程(第八章).htm

📁 perl的中文教程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
          name=Image17></A></TD></TR>
        <TR>
          <TD><A onmouseover="MM_swapImage('Image16','','13a.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://www.sun126.com/perl5/perl5-13.htm"><IMG 
            src="Perl 语言-Perl 中文教程(第八章).files/13.gif" border=0 
          name=Image16></A></TD></TR>
        <TR>
          <TD><A onmouseover="MM_swapImage('Image18','','14a.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://www.sun126.com/perl5/perl5-14.htm"><IMG 
            src="Perl 语言-Perl 中文教程(第八章).files/14.gif" border=0 
          name=Image18></A></TD></TR>
        <TR>
          <TD><A onmouseover="MM_swapImage('Image19','','y1a.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://www.sun126.com/perl5/perl5-15.htm"><IMG 
            src="Perl 语言-Perl 中文教程(第八章).files/y1.gif" border=0 
          name=Image19></A></TD></TR>
        <TR>
          <TD><A onmouseover="MM_swapImage('Image20','','y2a.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://www.sun126.com/perl5/perl5-16.htm"><IMG 
            src="Perl 语言-Perl 中文教程(第八章).files/y2.gif" border=0 
          name=Image20></A></TD></TR>
        <TR>
          <TD><A onmouseover="MM_swapImage('Image21','','y3a.gif',1)" 
            onmouseout=MM_swapImgRestore() 
            href="http://www.sun126.com/perl5/perl5-17.htm"><IMG 
            src="Perl 语言-Perl 中文教程(第八章).files/y3.gif" border=0 
          name=Image21></A></TD></TR></TBODY></TABLE></TD>
    <TD class=myFont vAlign=top width=30><IMG height=1 
      src="Perl 语言-Perl 中文教程(第八章).files/x.gif" width=10> </TD>
    <TD class=myFont vAlign=top>
      <DIV align=center><IMG height=30 
      src="Perl 语言-Perl 中文教程(第八章).files/top.gif" width=180><BR><SPAN 
      class=myFont><SPAN class=myFont><FONT face=宋体>翻译:</FONT></SPAN></SPAN> 
      <SPAN class=myFont><SPAN class=myFont>flamephoenix</SPAN></SPAN> <BR>
      <HR width="100%" SIZE=1>

      <DIV align=left>
      <P align=center><B>第八章 子程序</B></P>
      <P align=left><A 
      href="http://www.sun126.com/perl5/perl5-8.htm#一、定义">一、定义</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-8.htm#二、调用">二、调用</A><BR>&nbsp; <A 
      href="http://www.sun126.com/perl5/perl5-8.htm#1、用&amp;调用">1、用&amp;调用</A><BR>&nbsp; 
      <A 
      href="http://www.sun126.com/perl5/perl5-8.htm#2、先定义后调用">2、先定义后调用</A><BR>&nbsp; 
      <A 
      href="http://www.sun126.com/perl5/perl5-8.htm#3、前向引用">3、前向引用</A><BR>&nbsp; 
      <A 
      href="http://www.sun126.com/perl5/perl5-8.htm#4、用do调用">4、用do调用</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-8.htm#三、返回值">三、返回值</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-8.htm#四、局部变量">四、局部变量</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-8.htm#五、子程序参数传递">五、子程序参数传递</A><BR>&nbsp; 
      <A href="http://www.sun126.com/perl5/perl5-8.htm#1、形式">1、形式</A><BR>&nbsp; 
      <A href="http://www.sun126.com/perl5/perl5-8.htm#2、传送数组">2、传送数组</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-8.htm#六、递归子程序">六、递归子程序</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-8.htm#七、用别名传递数组参数">七、用别名传递数组参数</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-8.htm#八、预定义的子程序">八、预定义的子程序</A><BR><BR><A 
      name=一、定义>一、定义</A> 
      <BR>&nbsp;&nbsp;子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。PERL中,子程序可以出现在程序的任何地方。定义方法为:<BR>&nbsp;&nbsp;sub 
      subroutine{<BR>&nbsp;&nbsp;&nbsp;&nbsp;statements;<BR>&nbsp;&nbsp;}<BR><BR><A 
      name=二、调用>二、调用</A> <BR>&nbsp;&nbsp;调用方法如下:<BR><A 
      name=1、用&amp;调用>1、用&amp;调用</A> 
      <BR>&nbsp;&nbsp;&amp;subname;<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;sub 
      subname{<BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR>&nbsp;&nbsp;}<BR><A 
      name=2、先定义后调用>2、先定义后调用</A> ,可以省略&amp;符号<BR>&nbsp;&nbsp;sub 
      subname{<BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;subname;<BR><A 
      name=3、前向引用>3、前向引用</A> ,先定义子程序名,后面再定义子程序体<BR>&nbsp;&nbsp;sub 
      subname;<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;subname;<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;sub 
      subname{<BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR>&nbsp;&nbsp;}<BR><A 
      name=4、用do调用>4、用do调用</A> <BR>&nbsp;&nbsp;do my_sub(1, 2, 
      3);等价于&amp;my_sub(1, 2, 3);<BR><BR><A name=三、返回值>三、返回值</A> 
      <BR>&nbsp;&nbsp;缺省的,子程序中最后一个语句的值将用作返回值。语句return 
      (retval);也可以推出子程序并返回值retval,retval可以为列表。<BR><BR><A name=四、局部变量>四、局部变量</A> 
      <BR>&nbsp;&nbsp;子程序中局部变量的定义有两种方法:my和local。其区别是:my定义的变量只在该子程序中存在;而local定义的变量不存在于主程序中,但存在于该子程序和该子程序调用的子程序中(在PERL4中没有my)。定义时可以给其赋值,如:<BR>&nbsp;&nbsp;my($scalar) 
      = 43;<BR>&nbsp;&nbsp;local(@array) = (1, 2, 3);<BR><BR><A 
      name=五、子程序参数传递>五、子程序参数传递</A> <BR><A name=1、形式>1、形式</A> 
      <BR>&nbsp;&nbsp;&amp;sub1(&amp;number1, $number2, 
      $nubmer3);<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;sub 
      sub1{<BR>&nbsp;&nbsp;&nbsp;&nbsp;my($number1, $number2, $number3) = 
      @_;<BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR>&nbsp;&nbsp;}<BR><A 
      name=2、传送数组>2、传送数组</A> <BR>&nbsp;&nbsp;&amp;addlist 
      (@mylist);<BR>&nbsp;&nbsp;&amp;addlist ("14", "6", 
      "11");<BR>&nbsp;&nbsp;&amp;addlist ($value1, @sublist, 
      $value2);<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;sub addlist 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;my (@list) = 
      @_;<BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR>&nbsp;&nbsp;}<BR>参数为数组时,子程序只将它赋给一个数组变量。如<BR>&nbsp;&nbsp;sub 
      twolists {<BR>&nbsp;&nbsp;&nbsp;&nbsp;my (@list1, @list2) = 
      @_;<BR>&nbsp;&nbsp;}<BR>中@list2必然为空。但简单变量和数组变量可以同时传递:<BR>&nbsp;&nbsp;&amp;twoargs(47, 
      @mylist); # 
      47赋给$scalar,@mylist赋给@list<BR>&nbsp;&nbsp;&amp;twoargs(@mylist); # 
      @mylist的第一个元素赋给$scalar,其余的元素赋给@list<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;sub 
      twoargs {<BR>&nbsp;&nbsp;&nbsp;&nbsp;my ($scalar, @list) = 
      @_;<BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR>&nbsp;&nbsp;}<BR><BR><A 
      name=六、递归子程序>六、递归子程序</A> 
      <BR>&nbsp;&nbsp;PERL中,子程序可以互相调用,其调用方法与上述相同,当调用该子程序本身时,即成了递归子程序。递归子程序有两个条件:1、除了不被子程序改变的变量外,所有的变量必须的局部的;2、该子程序要含有停止调用本身的代码。<BR><BR><A 
      name=七、用别名传递数组参数>七、用别名传递数组参数</A> 
      <BR>1、用前面讲到的调用方法&amp;my_sub(@array)将把数组@array的数据拷贝到子程序中的变量@_中,当数组很大时,将会花费较多的资源和时间,而用别名传递将不做这些工作,而对该数组直接操作。形式如:<BR>&nbsp;&nbsp;@myarray 
      = (1, 2, 3, 4, 
      5);<BR>&nbsp;&nbsp;&amp;my_sub(*myarray);<BR>&nbsp;&nbsp;sub my_sub 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;my (*subarray) = 
      @_;<BR>&nbsp;&nbsp;}<BR>2、此方法类似于C语言中的传递数组的起始地址指针,但并不一样,在定义数组的别名之后,如果有同名的简单变量,则对该变量也是起作用的。如:<BR>&nbsp;&nbsp;$foo 
      = 26;<BR>&nbsp;&nbsp;@foo = ("here's", "a", 
      "list");<BR>&nbsp;&nbsp;&amp;testsub 
      (*foo);<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;sub testsub 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;local (*printarray) = 
      @_;<BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR>&nbsp;&nbsp;&nbsp;&nbsp;$printarray 
      = 
      61;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;当子程序执行完,主程序中的$foo的值已经成了61,而不再是26了。<BR>3、用别名的方法可以传递多个数组,如:<BR>&nbsp;&nbsp;@array1 
      = (1, 2, 3);<BR>&nbsp;&nbsp;@array2 = (4, 5, 
      6);<BR>&nbsp;&nbsp;&amp;two_array_sub (*array1, 
      *array2);<BR>&nbsp;&nbsp;sub two_array_sub {<BR>&nbsp;&nbsp;&nbsp;&nbsp;my 
      (*subarray1, *subarray2) = @_;<BR>&nbsp;&nbsp;} 
      <BR>&nbsp;&nbsp;在该子程序中,subarray1是array1的别名,subarray2是array2的别名。<BR><BR><A 
      name=八、预定义的子程序>八、预定义的子程序</A> 
      <BR>&nbsp;&nbsp;PERL5预定义了三个子程序,分别在特定的时间执行,它们是:BEGIN子程序在程序启动时被调用;END子程序在程序结束时被调用;AUTOLOAD子程序在找不到某个子程序时被调用。你可以自己定义它们,以在特定时间执行所需要的动作。如:<BR>&nbsp;&nbsp;BEGIN&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;print("Hi! 
      Welcome to 
      Perl!\n");<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;AUTOLOAD{<BR>&nbsp;&nbsp;&nbsp;&nbsp;print("subroutine 
      $AUTOLOAD not found\n"); # 
      变量$AUTOLOAD即未找到的子程序名<BR>&nbsp;&nbsp;&nbsp;&nbsp;print("arguments passed: 
      @_\n");<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;若同一个预定义子程序定义了多个,则BEGIN顺序执行,END逆序执行。</P></DIV></DIV></TD></TR></TBODY></TABLE>
<DIV align=center></DIV>
<DIV align=center><BR></DIV>
<DIV align=center><SPAN class=myFont><A 
href="http://www.sun126.com/perl5/perl5-7.htm">上页</A> <A 
href="http://www.sun126.com/perl5/perl5-9.htm">下页</A> <A 
href="http://www.sun126.com/perl5/perl5index.htm">回目录</A> <A 
href="http://www.sun126.com/perl5/perl5-8.htm#a"><FONT face="Arial, 宋体">Go 
Top</FONT></A></SPAN><BR><BR></DIV>
<TABLE height=50 cellSpacing=0 cellPadding=0 width="100%" bgColor=#000000 
border=0>
  <TBODY>
  <TR>
    <TD bgColor=#cccc99 height=4>
      <DIV align=center><IMG height=4 src="" width=4></DIV></TD></TR>
  <TR>
    <TD height=50>
      <DIV align=center><FONT class=myfont size=2><SPAN class=myfont><FONT 
      color=#99cc99><A href="http://www.sun126.com/bbs/ccb/index.cgi"><FONT 
      color=#99cc99>中国CCB论坛</FONT></A>  整理 麻辣 
      2003.7.10</FONT></SPAN></FONT><FONT class=myfont color=#99cc99 
      size=2><SPAN class=myfont><FONT 
      color=#99cc66><BR></FONT></SPAN></FONT><SPAN class=myfont><FONT 
      class=myfont><SPAN class=myfont><FONT face="Arial, Helvetica, sans-serif" 
      color=#99cc99>&copy; 2000 
      http://www.sun126.com</FONT></SPAN></FONT></SPAN></DIV></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -