Perl_子例程调用by引用

#第一种情况,传匿名子例程引用

my $rs=\&greet;

#$rs=\&greet();#wrong

#$rs->('Joan','Kim');#当调用的已经是匿名子例程引用的时候。这行放在这里报错


my $hidrs=sub{
        my $ele=shift (@_);
        print "$ele say \"Hello World\".\n";
};#here is only 1 line not 4 lines
#&$hidrs('Tim');

#my $hidrs这块不能放在sub greet块的后面,不然会报错。


$rs->('Joan','Kim');#当调用的已经是匿名子例程引用的时候。这行放在这里工作正常

sub greet{
        my $ele=shift;
        print "$ele and ";
        return &$hidrs;#当调用的已经是 匿名子例程引用的时候,要注意写法与下面的 区分开来
}#here is 5 lines

$rs->('Joan','Kim');#当调用的已经是 匿名子例程引用的时候。这行放在这里工作 正常


#另一种情况,传有名子例程引用

my $rs1 = \&test1;
$rs1 -> ("Batman") -> ("Robin");#当调用的是 有名子例程引用的时候。这行放在这里工作 正常

#sub test1()#work

subtest1

{

        my $arg = shift;
        print $arg;
        return \&test2;#当调用的是 有名子例程引用的时候

}

$rs1 -> ("Batman") -> ("Robin");#当调用的是有名子例程引用的时候。这行放在这里工作正常


#sub test2()#work

sub test2

{
        my $arg = shift;
        print " and $arg say \"Hello World\" too.\n";

}

$rs1 -> ("Batman") -> ("Robin");#当调用的是有名子例程引用的时候。这行放在这里工作正常

你可能感兴趣的:(Perl技巧)