将值传递给perl中引用的子例程
问题描述:
我有几个引用的子例程,我需要将值传递给引用的子例程。 有没有办法做到这一点。将值传递给perl中引用的子例程
#Sample Code
sub CreateHtmlBox {
my ($box_type,$hash_ref) = @_;
my %subCall = (
'singlebox' => \&CreateSingleBox ,
'multiplebox' => \&CreateMultipleBox
);
my $htmlCode = $subCall->($box_html);
}
sub CreateSingleBox {
my ($box_type) [email protected]_;
#...................
return $htmlCode;
}
我想调用引用的子例程并将散列引用传递给它。
CreateSingleBox($hash_ref)
答
您必须先访问哈希中的特定元素,然后才能将其称为coderef。即
# WRONG! Variable $subCall does not exist.
my $htmlCode = $subCall->($box_html);
确实应该
my $htmlCode = $subCall{box_type}($box_html);
生成的代码应该是这样的:
use strict;
use warnings;
sub CreateHtmlBox {
my ($box_type, $hash_ref) = @_;
my %subCall = (
singlebox => \&CreateSingleBox,
multiplebox => \&CreateMultipleBox,
);
return $subCall{$box_type}($hash_ref);
}
sub CreateSingleBox {
my ($box_type) = @_;
my $htmlCode= "<p>" . $box_type->{a} . "</p>";
return $htmlCode;
}
print CreateHtmlBox("singlebox",{a => 1})
目前还不清楚,你需要传递给你调用子程序什么价值。无论如何,在你的例子中缺少一个级别:'$ subCall - >($ box_html)'应该是(假设你想调用'CreateSingleBox'):'$ subcCall {singlebox} - >($ box_html)''。 – larsen 2013-04-09 12:11:18