大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> CGI专区 -> Perl教学 第十二篇 Perl5中的引用之五

Perl教学 第十二篇 Perl5中的引用之五

时间: 2021-07-31 作者:daque

六、子步调的援用perl中子步调的援用与c中因变量的南针一致,结构本领如次:$pointer_to_sub = sub {... declaration of sub ...};经过所结构的援用挪用子步调的本领为:&$pointer_to_sub(parameters);·子步调沙盘子步调的归来值不只限于数据,还不妨归来子步调的援用。归来的子步调在调用途实行,但却是在首先被创造的调用途被树立,这是由perl对closure处置的办法确定的。closure意即即使你设置了一个因变量,它就以首先设置的实质运转。(closure详见oop的参考书)底下的例子中,树立了多个缺点消息表露子步调,如许的子步调设置本领可用来创造沙盘。#!/usr/bin/perlsub errormsg {my $lvl = shift;## define the subroutine to run when called.#return sub {my $msg = shift; # define the error type now.print "err level $lvl:$msg\n"; }; # print later. }$severe = errormsg("severe");$fatal = errormsg("fatal");$annoy = errormsg("annoying");&$severe("divide by zero");&$fatal("did you forget to use a semi-colon?");&$annoy("uninitialized variable in use"); 截止输入如次:err level severe:divide by zeroerr level fatal:did you forget to use a semi-colon?err level annoying:uninitialized variable in use 上例中,子步调errormsg运用结果域变量$lvl,用来归来给挪用者。当errormsg被挪用时,$lvl的值树立到归来的子步调实质中,固然是用的my因变量。三次挪用树立了三个各别的$lvl变量值。当errormsg归来时,$lvl的值生存到历次被证明时所爆发的子步调代码中。结果三句对爆发的子步调援用举行挪用时$msg的值被替代,但$lvl的值仍是相映子步调代码创造时的值。很污染是吗?是的,以是如许的代码在perl步调中很罕见。七、数组与子步调数组利于处置关系数据,本节计划怎样向子步调传播多个数组。前方咱们讲过用@_传播子步调的参数,然而@_是一个单维数组,尽管你传播的参数是几何个数组,都按序存贮在@_中,故用形如my(@a,@b)=@_; 的语句来获得参数值时,十足值都赋给了@a,而@b为空。那么如何把一个之上的数组传播给子步调呢?本领是用援用。见下例:#!/usr/bin/perl@names = (mickey, goofy, daffy );@phones = (5551234, 5554321, 666 );$i = 0;sub listem {my ($a,$b) = @_;foreach (@$a) {print "a[$i] = " . @$a[$i] . " " . "\tb[$i] = " . @$b[$i] ."\n";$i++;}}&listem(\@names, \@phones); 截止输入如次:a[0] = mickey b[0] = 5551234a[1] = goofy b[1] = 5554321a[2] = daffy b[2] = 666提防: 1、当想传播给子步调的参数是多于一个的数组时确定要运用援用。2、确定不要在子步调中运用形如 (@variable)=@_; 的语句处置参数,只有你想把一切参数会合到一个长的数组中。八、文献句柄的援用偶尔,必需将同一消息输入到各别的文献,比方,某步调大概在一个范例中输入到屏幕,另一个输入到打字与印刷机,再一个输入到记载文献,以至同声输入到这三个文献。比拟较于每种处置写一个独立的语句,不妨有更好的实行办法如次:spitout(\*stdin);spitout(\*lphandle);spitout(\*loghandle);个中子步调spitout的代码如次:sub spitout {my $fh = shift;print $fh "gee wilbur, i like this lettuce\n";} 提防个中文献句柄援用的语法为\*filehandle。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.