将带有参数的子例程推入Perl中的堆栈

总部

我想将带有参数的子例程推入堆栈,但是我无法弄清楚语法。考虑一个没有参数的工作示例:

#!/usr/bin/perl -w
use strict;
use warnings;

sub hi    { print "hi\n";    }
sub hello { print "hello\n"; }
sub world { print "world\n"; }

my @stack;
push (@stack, \&hi   );
push (@stack, \&hello);
push (@stack, \&world);

while (@stack) {
    my $proc = pop @stack;
    $proc->();
}

当我运行代码时:

% ./pop-proc.pl
world
hello
hi

现在我的问题是,如果子例程看起来像这样:

sub mysub 
{
    chomp( my( $arg ) = @_ );
    print "$arg\n"; 
}

我想用参数推送子例程,例如:

mysub("hello");
mysub("world");

非常感谢您的投入。

池上

使用匿名子(甚至可能是闭包)。

push @stack, sub { mysub("hello") };
push @stack, sub { mysub("world") };

例如,

sub hi { say "@_" }
my $arg = "Hello";
my $sub = sub { hi($arg, @_) };
$sub->("World");   # Hello World

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有可选块参数的子例程

在Perl中,将参数传递给子例程,该子例程也是参数

如何获取带有子例程的开始和结束行号的perl子例程列表?

带有散列和可选标量参数的子例程

Perl,最佳实践:在子例程中处理空参数,使用$ _

Perl子例程中的本地$ _

列出perl程序中的所有子例程名称

将带有args的函数推入数组中以供以后调用

如何获取Perl子例程的参数内容

使用子例程作为foreach的参数的perl

子例程在其调用例程的堆栈中写入是否安全?

调用带有可选参数的子例程时,缺少实际参数

是否可以将带有完成块的View Controller推入?

为什么带有假定形状参数的子例程不能具有内部函数?

如何防止子例程中的第一个参数被吸收到 perl 中的“@_”中?

调用带有对象作为参数的子例程时的运行时错误Excel VBA

在Perl中找不到导出的子例程

检查Perl中是否存在子例程

perl中的子例程以执行#ARGV条目

如何从Perl中的模块导入子例程

如何解析传递给子例程的一个参数,该子例程定义为在Perl中接受2个参数

将带有 ">=" 的参数传递给 argparse

如何通过子进程将带有空格的参数传递给bash?

如何将带有Lambda函子参数的require子句使用?

将带有模板化参数的函子传递给模板函数

如何仅将带有参数的子站点重写为html

在带有参数的perl脚本中执行perl脚本

在CDECL调用约定中,可以重用推入堆栈的参数吗?

将带有查询参数的URL传递为JavaScript中的函数参数