📄 perl 语言-perl 中文教程(第八章).htm
字号:
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> <A
href="http://www.sun126.com/perl5/perl5-8.htm#1、用&调用">1、用&调用</A><BR>
<A
href="http://www.sun126.com/perl5/perl5-8.htm#2、先定义后调用">2、先定义后调用</A><BR>
<A
href="http://www.sun126.com/perl5/perl5-8.htm#3、前向引用">3、前向引用</A><BR>
<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>
<A href="http://www.sun126.com/perl5/perl5-8.htm#1、形式">1、形式</A><BR>
<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> 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。PERL中,子程序可以出现在程序的任何地方。定义方法为:<BR> sub
subroutine{<BR> statements;<BR> }<BR><BR><A
name=二、调用>二、调用</A> <BR> 调用方法如下:<BR><A
name=1、用&调用>1、用&调用</A>
<BR> &subname;<BR> ...<BR> sub
subname{<BR> ...<BR> }<BR><A
name=2、先定义后调用>2、先定义后调用</A> ,可以省略&符号<BR> sub
subname{<BR> ...<BR> }<BR> ...<BR> subname;<BR><A
name=3、前向引用>3、前向引用</A> ,先定义子程序名,后面再定义子程序体<BR> sub
subname;<BR> ...<BR> subname;<BR> ...<BR> sub
subname{<BR> ...<BR> }<BR><A
name=4、用do调用>4、用do调用</A> <BR> do my_sub(1, 2,
3);等价于&my_sub(1, 2, 3);<BR><BR><A name=三、返回值>三、返回值</A>
<BR> 缺省的,子程序中最后一个语句的值将用作返回值。语句return
(retval);也可以推出子程序并返回值retval,retval可以为列表。<BR><BR><A name=四、局部变量>四、局部变量</A>
<BR> 子程序中局部变量的定义有两种方法:my和local。其区别是:my定义的变量只在该子程序中存在;而local定义的变量不存在于主程序中,但存在于该子程序和该子程序调用的子程序中(在PERL4中没有my)。定义时可以给其赋值,如:<BR> my($scalar)
= 43;<BR> local(@array) = (1, 2, 3);<BR><BR><A
name=五、子程序参数传递>五、子程序参数传递</A> <BR><A name=1、形式>1、形式</A>
<BR> &sub1(&number1, $number2,
$nubmer3);<BR> ...<BR> sub
sub1{<BR> my($number1, $number2, $number3) =
@_;<BR> ...<BR> }<BR><A
name=2、传送数组>2、传送数组</A> <BR> &addlist
(@mylist);<BR> &addlist ("14", "6",
"11");<BR> &addlist ($value1, @sublist,
$value2);<BR> ...<BR> sub addlist
{<BR> my (@list) =
@_;<BR> ...<BR> }<BR>参数为数组时,子程序只将它赋给一个数组变量。如<BR> sub
twolists {<BR> my (@list1, @list2) =
@_;<BR> }<BR>中@list2必然为空。但简单变量和数组变量可以同时传递:<BR> &twoargs(47,
@mylist); #
47赋给$scalar,@mylist赋给@list<BR> &twoargs(@mylist); #
@mylist的第一个元素赋给$scalar,其余的元素赋给@list<BR> ...<BR> sub
twoargs {<BR> my ($scalar, @list) =
@_;<BR> ...<BR> }<BR><BR><A
name=六、递归子程序>六、递归子程序</A>
<BR> PERL中,子程序可以互相调用,其调用方法与上述相同,当调用该子程序本身时,即成了递归子程序。递归子程序有两个条件:1、除了不被子程序改变的变量外,所有的变量必须的局部的;2、该子程序要含有停止调用本身的代码。<BR><BR><A
name=七、用别名传递数组参数>七、用别名传递数组参数</A>
<BR>1、用前面讲到的调用方法&my_sub(@array)将把数组@array的数据拷贝到子程序中的变量@_中,当数组很大时,将会花费较多的资源和时间,而用别名传递将不做这些工作,而对该数组直接操作。形式如:<BR> @myarray
= (1, 2, 3, 4,
5);<BR> &my_sub(*myarray);<BR> sub my_sub
{<BR> my (*subarray) =
@_;<BR> }<BR>2、此方法类似于C语言中的传递数组的起始地址指针,但并不一样,在定义数组的别名之后,如果有同名的简单变量,则对该变量也是起作用的。如:<BR> $foo
= 26;<BR> @foo = ("here's", "a",
"list");<BR> &testsub
(*foo);<BR> ...<BR> sub testsub
{<BR> local (*printarray) =
@_;<BR> ...<BR> $printarray
=
61;<BR> }<BR> 当子程序执行完,主程序中的$foo的值已经成了61,而不再是26了。<BR>3、用别名的方法可以传递多个数组,如:<BR> @array1
= (1, 2, 3);<BR> @array2 = (4, 5,
6);<BR> &two_array_sub (*array1,
*array2);<BR> sub two_array_sub {<BR> my
(*subarray1, *subarray2) = @_;<BR> }
<BR> 在该子程序中,subarray1是array1的别名,subarray2是array2的别名。<BR><BR><A
name=八、预定义的子程序>八、预定义的子程序</A>
<BR> PERL5预定义了三个子程序,分别在特定的时间执行,它们是:BEGIN子程序在程序启动时被调用;END子程序在程序结束时被调用;AUTOLOAD子程序在找不到某个子程序时被调用。你可以自己定义它们,以在特定时间执行所需要的动作。如:<BR> BEGIN {<BR> print("Hi!
Welcome to
Perl!\n");<BR> }<BR> AUTOLOAD{<BR> print("subroutine
$AUTOLOAD not found\n"); #
变量$AUTOLOAD即未找到的子程序名<BR> print("arguments passed:
@_\n");<BR> }<BR> 若同一个预定义子程序定义了多个,则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>© 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 + -