Fli*_*imm 8 perl function subroutine
使用原型,您可以创建一个接受代码块作为其第一个参数的子例程:
sub example (&) {
my $code_ref = shift;
$code_ref->();
}
example { print "Hello\n" };
Run Code Online (Sandbox Code Playgroud)
我怎么能做同样的事情,但有多个代码块?我想使用代码块,而不是变量或sub { ... }.
这不起作用:
sub example2 (&&) {
my $code_ref = shift;
my $code_ref2 = shift;
$code_ref->();
$code_ref2->();
}
example2 { print "One\n" } { print "Hello\n" };
Run Code Online (Sandbox Code Playgroud)
它给出了这个错误:
Not enough arguments for main::example2
Run Code Online (Sandbox Code Playgroud)
我希望你意识到这只是代码调味,而你所实现的只是一种更整洁的语法而牺牲了清晰度?
Perl不允许您将多个裸块传递给子例程,但第二个实际参数可能是对子例程的调用,该子例程也占用一个块并简单地返回代码引用.
该计划表明.请注意,我已选择please并also作为子例程的名称.但是你必须使用适合你自己的代码功能的东西,并且不太可能与即将到来的核心语言扩展冲突.
use strict;
use warnings;
sub please(&$) {
my ($code1, $code2) = @_;
$code1->();
$code2->();
}
sub also(&) {
$_[0];
}
please { print "aaa\n" } also { print "bbb\n" };
Run Code Online (Sandbox Code Playgroud)
产量
aaa
bbb
Run Code Online (Sandbox Code Playgroud)