gpt4 book ai didi

Perl 调用存在于数组内部的子例程

转载 作者:行者123 更新时间:2023-12-02 05:38:30 24 4
gpt4 key购买 nike

我正在尝试用 Perl 制作一个状态机。为此,我有一个由州名索引的数组。我可以将 subs 放入这个数组中。像这样:

   use constant {
stInit => 0,
stHeader => 1,
stSalesHeader => 2,
stCatagory => 3,
stData => 4,
stTotal => 5,
stError => 6,
};

my $state = stInit;
my @actions;

$actions[stInit] = [sub{logState("Initial state entered",2) }];
$actions[stHeader] = [sub{logState("Header state entered",2) }];
$actions[stSalesHeader] = [sub{logState("Sales header state entered",2) }];
$actions[stCatagory] = [sub{logState("Category state entered",2) }];
$actions[stData] = [sub{logState("Data state entered",2) }];
$actions[stTotal] = [sub{logState("Total state entered",2) }];

但后来我不知道如何调用子例程。这个我试过了

$actions[$state]

但这似乎不起作用。这是可能的还是我完全不在乎?

最佳答案

你真的应该添加

use strict;
use warnings;

到您的代码的开头,这会为您发现许多简单的错误。在这种情况下,您的代码没有问题,您可以使用

调用您的子例程
$actions[$state][0]();

等等

但是没有必要将子程序放在方括号内,这只是创建一个单元素匿名数组并添加一个额外的索引级别(因此 [0] 在上面的行中代码。如果你改为编写这样的代码

$actions[stInit] = sub { logState("Initial state entered", 2) };

然后你就可以调用子程序了

$actions[$state]();

关于Perl 调用存在于数组内部的子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8935988/

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