我發現在perl中分派很多函數的最快方法是使用函數引用。 剩下的問題是,我必須將函數名稱包含在調度程序和函數模塊中的我們的($ func1,$ func2,...)列表中。我不能以任何方式包含它們,就像C包括會做的那樣。在這裏我的代碼: 主要模塊:在perl中調度函數,如何包含我們的列表
use strict;
our ($base);
$base = '/home/en/dtest/perl/forditas/utf8/forditas/test1';
require("$base/disph1.pl");
require("$base/fut1h1.pl");
for (my $j = 0; $j < 5; $j++){
dispatch($j);
}
調度模塊:
use strict;
our ($base);
require("$base/fut1h1.pl");
our ($sref1, $sref2, $sref3, $sref4, $sref5); # This is what I'd like to include
my %shash = (
'0' => $sref1,
'1' => $sref2,
'2' => $sref3,
'3' => $sref4,
'4' => $sref5,
);
sub dispatch($){
my ($ix) = @_;
my ($a, $b, $c);
$a = 1; $b = 2; $c = 3;
my $ref = $shash{$ix};
&$ref($a,$b, $c);
}
1;
功能模塊:
use strict;
our ($sref1, $sref2, $sref3, $sref4, $sref5); # This is what I'd like to include
$sref1 = sub($$$) {
my ($a,$b,$c) = @_;
print "sub1 $a,$b,$c\n";
};
$sref2 = sub($$$) { my ($a,$b,$c) = @_; print "sub2 $a, $b, $c\n"; };
$sref3 = sub { print "sub3\n"; };
$sref4 = sub { print "sub4\n"; };
$sref5 = sub { print "sub5\n"; };
1;
這是一個運行的結果:
$ perl enhufh1.pl
sub1 1,2,3
sub2 1, 2, 3
sub3
sub4
sub5
在此先感謝提示。
第一個模塊名爲enhufh1.pl,第二個模塊(dispatcher)是disph1.pl,第三個模塊(功能模塊)是fut1h1.pl。 – eleonora
*永遠不要*使用子程序原型,除非你確切地知道他們做了什麼。你當然不需要他們 - 'sub dispatch {...}'很好。 – Borodin