我想调用另一个函数中的函数作为参数,但出现了错误



我有一个函数正在调用另一个函数并在其中传递参数。其中一个参数是存储在变量中的函数。当我试图在另一个函数中调用该函数时,它抛出了一个错误。

my @tst1 = ("tst1 - Checking Whether the naming format of created Directory by using tar ball is same as expected in the format of trustid_web_ yyyyMMdd-HHmmss.tar.gz and same as tar ball", "runCmd()");
@tstInfo = (@tst1);
sub populatetestCb() {   
for ($i = 0; $i <= $ #tstInfo; $i++) {
$testCb {
$i + 1
} = $tstInfo[$i];
}
}
populatetestCb();
$startTime = localtime();
my $tmp = 1;
while (1) {
my $ret = getTestDetails($tmp);
if ($ret eq 1) {
$tStartTime = localtime();
my $tstRes = runTest($tstDes, $tstFunction);
$tEndTime = localtime();
#PRINT_LOG("runTest returned $tstResn");
$tmp++;
sleep(2);
} else {
last;
}
}
sub runTest {
$tstName = $_[0];
my $tstFunction = $_[1];
print($tstFunction);
my $action =  & $tstFunction;
$action - > ();
}

当我在runTest函数中调用$action->()时,它正在抛出

Undefined subroutine &main::runCmd() called at testAutomation.pl line 83. 

my @tst1是一个数组,它包含测试描述和测试它所需调用的函数。populateTestCb是存储它的散列,我正在getTestDetails函数中访问它,我想从那里调用runTest并将特定函数调用到它中。

如果不严格,按名称调用函数通常有效:

no strict;
my $name = 'func';
$name->() and print 'ok';  # ok
sub func { 1 }

在严格的情况下,这仍然是可能的,但需要额外的步骤。不过,除了AUTOLOAD之外,它不应该用于任何事情。

my $name = 'func';
my $f = &{$name};
$f->() and print 'ok';  # ok

通常,您会将子例程引用存储在变量中,然后再调用它:

my $func = &func;
$func->() and print 'ok';  # ok

相关内容

  • 没有找到相关文章

最新更新