perl中子程序的引用与C中函数的指针类似,构造方法如下: $pointer_to_sub = sub {... declaration of sub ...}; 通过所构造的引用调用子程序的方法为: &$pointer_to_sub(parameters); 子程序模板 子程序的返回值不仅限于数据,还可以返回子程序的引用。返回的子程序在调用处执行,但却是在最初被创建的调用处被设置,这是由Perl对Closure处理的方式决定的。Closure意即如果你定义了一个函数,它就以最初定义的内容运行。(Closure详见OOP的参考书)下面的例子中,设置了多个错误信息显示子程序,这样的子程序定义方法可用于创建模板。
#!/usr/bin/perl sub 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:$msgn"; }; # 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 zero Err Level Fatal:Did you forget to use a semi-colon? Err Level Annoying:Uninitialized variable in use