2
我創造了這樣一個對象作爲如何遍歷
my $hex = Hexagram->new();
對Perl對象的方法,它有多種方法:
top
bot
chinese
title
meaning
此對象將創造了無數次,每次我需要收集和測試上述每種方法的信息。
我想這樣做
foreach my $method (qw/top bot chinese title meaning/)
{
&gather_info($hex,$method);
}
,然後有一些像
sub gather_info {
my ($hex,$method) = @_;
print "What is the $method? ";
my $response = <STDIN>;
chomp $response;
$hex->${method}($reponse);
.... and other actions ....
}
但是,這是行不通的。相反,對於每種方法,我似乎必須一次又一次地寫出基本的代碼結構,這看起來簡單浪費。
我也試過的東西,我試圖傳遞給方法調用的參考,如
foreach my $ra ([\$hex->top, "top"],
[\$hex->bot, "bot"],....)
{
my ($object_method, $name) = @{$ra};
&rgather_info($object_method, $name);
}
其中
sub $gather_info {
my ($rhex, $name) = @_;
print "What is the $name?";
my $response = <STDIN>;
chomp $response;
&{$rhex}($response);
.... and other actions ....
}
但是這一次我得到
錯誤Not a CODE reference at <program name> line <line number>,....
關於如何做到這一點的任何建議?
你是什麼意思「這不行」? '$ obj - > $ method(@args)'是有效的Perl。 – choroba