gpt4 book ai didi

perl - 如何遍历 Perl 中的函数列表?

转载 作者:行者123 更新时间:2023-12-04 22:09:18 25 4
gpt4 key购买 nike

我有一个 Perl 中的函数列表。例子:

my @funcs = qw (a b c)

现在它们都属于这个模块 Foo::Bar::Stix。我想在循环中迭代地调用它们:
foreach $func (@funcs) {
Foo::Bar::Stix::$func->(%args)
}

其中 args 是参数的散列。但是我不断收到此错误:“Bad name after::...”在包含 Foo::Bar::Stix::$func->(%args) 的行中如何解决此错误?

a b 和 c 不是函数对象而是字符串

最佳答案

与其将函数的名称存储在数组中,不如将对它们的引用存储在散列中,以便您可以按名称引用它们。这是一个简单的代码示例:

#!/usr/bin/perl

use strict;
use warnings;

my %func_refs = (
'a' => \&Foo::Bar::Stix::a,
'b' => \&Foo::Bar::Stix::b,
'c' => \&Foo::Bar::Stix::c
);

foreach my $func_ref ( values %func_refs ) {
print $func_ref->( "woohoo: " ), "\n";
}

{
package Foo::Bar::Stix;

sub a {
my $arg = shift;
return $arg . "a";
}

sub b {
my $arg = shift;
return $arg . "b";
}

sub c {
my $arg = shift;
return $arg . "c";
}
}

如果您因某种原因无法存储名称,请尝试以下操作:
my $package    = "Foo::Bar::Stix";
my @func_names = qw/ a b c /;
foreach my $func_name (@func_names) {
my $str = &{ "$package\::$func_name" }( "woohoo: " );
print $str, "\n";
}

但是,这在 use strict 下不起作用,因此我更喜欢第一种解决方案。无论你做什么,尽量避免使用 eval。这是不必要的,并且可能只会给您带来问题。

此外,大多数使用 Perl 的人将其大写为 Perl 而不是 PERL。这是关于该主题的 Stackoverflow 问题:

How should I capitalize Perl?

关于perl - 如何遍历 Perl 中的函数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1231683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com