- 论坛徽章:
- 42
|
本帖最后由 laputa73 于 2013-07-04 08:54 编辑
你想要的是函数指针的例子吧.- #!/bin/env perl
- use strict;
- #1.只有一个参数时可以省略().和lua一样
- sub f1($){
- my($a)=@_;
- print "$a->{a}.\n";
- }
- sub f2($){
- my($a)=@_;
- print "$a->{b}.\n";
- }
- f1{"a","b","1","2"};
- #output
- #-bash-3.00$ perl testf.pl
- #b.
- #2.使用变量名调用函数
- my $fname="f1";
- #&{\&{$fname}}({"a","b","1","2"}); #这里不能省略()
- &{\&$fname}({"a","b","1","2"});
- my $f=\&{$fname};
- #my $f=\&$fname; #可以省略{}
- &$f({"a","b","1","2"}); #这里不能省略()
- my $cmd="${fname}({'a','b','1','2'});";
- #eval($cmd);
- eval("${fname}({'a','b','1','2'});");
- #output.以上相同
- #-bash-3.00$ perl testf.pl
- #b.
- #b.
- #3.函数赋值给变量
- #和lua不同,lua要求调用函数没有参数时,必须加().否则代表函数赋值
- #而perl则是要求函数赋值时必须加\&
- #即$f=f1在perl里面代表函数调用(标量) ,而f=f1在lua里面代表函数赋值
- my $ff=\&f1;
- &$ff({"a","b","1","2"});
- $ff=\&f2;
- &$ff({"a","1","b","2"});
- $ff=f1{"a","1","b","2"};
- &$ff;
- #-bash-3.00$ perl testf.pl
- #b.
- #b.
- #1.
- #2.
- my {$fff}=&f1;
- fff({"a","b","1","2"});
- #4.匿名函数
- sub f3{
- return sub{
- my($a)=@_;
- print "$a->{a}.\n";
- }
- }
- $ff=f3;
- &$ff({"a","1","b","2"});
- #-bash-3.00$ perl testf.pl
- #b.
- #b.
- #1.
- #2.
- #1.
- #5.闭包
- sub f4{
- my $b=shift;
- return sub{
- my($a)=@_;
- print "$a->{$b}.\n";
- }
- }
- $f=f4("a");
- &$f({"a","1","b","2"});
- $f=f4("b");
- &$f({"a","1","b","2"});
复制代码 |
|