【发布时间】:2013-01-15 01:27:04
【问题描述】:
基本上,我正在尝试仅使用变量/标量调用包函数,但我不知道为什么会收到“错误:括号中的参数不正确”。
这里是示例下午:
package foo;
sub bar {
my $request = @_[0];
if ($request eq 'fubar') {
my $response = 'definitely';
return $response;
else {
my $response = 'definitely not';
return $response;
}
}
1;
还有样本 pl
use strict;
use lib "/blah/blah/custom_modules";
use sample;
my $package = 'foo';
my $package_sub = 'bar';
my $package_sub_args = 'fubar';
my $response = $package->$package_sub("$package_args");
print "$response\n";
然后我得到了错误。
但是,使用以下任何变体都可以:
my $response = foo::bar('fubar');
my $response = foo::bar($package_sub_args);
但我相信我不能在上面的OO符号类型中使用变量,必须使用->符号。
无论如何,非常感谢您的帮助。
澄清 - 我遇到的问题是直到运行时才知道包、子或参数。当子不需要参数时,我可以使它工作。但是我有几个需要参数的潜艇,这就是我绊脚石的地方......
【问题讨论】:
-
我相信间接调用 sub 的一种方法是使用 &{$mysub}($param);以及命名 sub $mysub = "foo::bar" 的字符串或引用 $mysub = \&foo::bar ;
-
直到运行时才知道包或子程序的名称吗?
-
@JonahBishop - 是的,直到运行时我才知道包名称、子程序或参数
-
@Paul -arggh 抱歉,伙计 - 你先得到它。下次我来接你
-
我猜,
if条件中缺少花括号。
标签: perl variables arguments package