如何创建一个接受多个块的Perl子例程?

前端之家收集整理的这篇文章主要介绍了如何创建一个接受多个块的Perl子例程?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用原型,您可以创建一个子程序,接受一段代码作为其第一个参数:
sub example (&) {
   my $code_ref = shift;
   $code_ref->();
}
example { print "Hello\n" };

我怎么能做同样的事情,但有多个代码块?我想使用代码块,而不是变量或子{…}.

这不起作用:

sub example2 (&&) {
   my $code_ref = shift;
   my $code_ref2 = shift;
   $code_ref->();
   $code_ref2->();
}
example2 { print "One\n" } { print "Hello\n" };

它给出了这个错误

Not enough arguments for main::example2

解决方法

我希望你意识到这只是代码调料,而你所实现的只是一种更整洁的语法而牺牲了清晰度?

Perl不允许您将多个裸块传递给子例程,但第二个实际参数可能是对子例程的调用,该子例程也占用一个块并简单地返回代码引用.

这个程序演示.请注意,我已选择了please,也作为子程序的名称.但是你必须使用适合你自己的代码功能的东西,并且不太可能与即将到来的核心语言扩展冲突.

use strict;
use warnings;

sub please(&$) {
  my ($code1,$code2) = @_;
  $code1->();
  $code2->();
}

sub also(&) {
  $_[0];
}

please { print "aaa\n" } also { print "bbb\n" };

产量

aaa
bbb

猜你在找的Perl相关文章