1. return sub {...} 是当然有的,sub {...} 是匿名子程序的引用,这里就是返回这个匿名子程序的引用
2. shift 就是取得传入这些子程序的第一个参数, 因为 perl 中传给子程序的参数是保存在 @_ 这个默认数组里的, $lvl=shift 其实就等价于
$lvl=shift @_;
举例说明:
$severe=errorMsg("Severe");
此时,errorMsg("Severe"); 返回的就是一个匿名子程序引用,或者说匿名函数引用,这个匿名子程序的内容此时就相当于:
---------------------
sub {
my $msg=shift;
print "Err Lever Severe:$msg\n"}; # 前面 $lvl=shift 得到的就是传给 errorMsg() 的参数 "Severe"
}
---------------------
---------- Forwarded message ----------
From: qingshui <xiongpersonal@gmail.com>
Date: 2009/9/30
Subject: [PerlChina] 有个程序不是很理解,请大家给我指点一下
To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
#!/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 Lever $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");
这个程序是在我看关于子程序的引用的时候,看到的,我看了以后,有两个问题:
1. 有没有return sub 这样的语句啊,应该怎么理解?
2.子程序下定义的变量$lvl=shift,我不是很理解,而且return sub后面中又有
my $msg=shift;这个我也不懂
请大家帮我理解一下,多谢!
From: qingshui <xiongpersonal@gmail.com>
Date: 2009/9/30
Subject: [PerlChina] 有个程序不是很理解,请大家给我指点一下
To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
#!/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 Lever $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");
这个程序是在我看关于子程序的引用的时候,看到的,我看了以后,有两个问题:
1. 有没有return sub 这样的语句啊,应该怎么理解?
2.子程序下定义的变量$lvl=shift,我不是很理解,而且return sub后面中又有
my $msg=shift;这个我也不懂
请大家帮我理解一下,多谢!
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---
没有评论:
发表评论