2013-04-09 86 views
0

我有几个引用的子例程,我需要将值传递给引用的子例程。 有没有办法做到这一点。将值传递给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) 
+0

目前还不清楚,你需要传递给你调用子程序什么价值。无论如何,在你的例子中缺少一个级别:'$ subCall - >($ box_html)'应该是(假设你想调用'CreateSingleBox'):'$ subcCall {singlebox} - >($ box_html)''。 – larsen 2013-04-09 12:11:18

回答

2

您必须先访问哈希中的特定元素,然后才能将其称为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}) 
相关问题