Perl将字符串识别为标量变量

时间:2013-02-19 11:13:42

标签: perl

我有名为$A_cine$B_cine的整数标量变量,等等。

我还有一个子例程display,它只需要一个参数'A''B''C'等。

我在子程序中指定$letter = $_[0]。我现在想要获取$A_cine$B_cine的值,并将其分配给新的标量变量$cine

我已尝试$cine = '$'.$view."_cine",并将$cine识别为字符串$A_cine(它应该)。但是,有没有办法解释$A_cine所以我可以得到之前定义的标量$A_cine的数值?

3 个答案:

答案 0 :(得分:8)

使用符号引用是个坏主意。相反,你应该使用哈希。设置,说%cine并使用$cine{A}代替$A_cine等。然后你可以写

sub subroutine {
  my ($view) = @_;
  my $cine = $cine{$view};
  ...
}

答案 1 :(得分:7)

您正在尝试构建symbolic reference

sub display {
    my $letter = $_[0];

    no strict 'refs';
    my $cine = ${ $letter . "_cine" };

    print $cine, "\n";  # for example
}

使用哈希几乎总是更好的目的。有关详细信息,请参阅Mark Dominus(Higher Order Perl的作者)关于为什么使用符号引用可能存在危险的三部分系列。

答案 2 :(得分:4)

您可以如上所示制作符号引用,但通常使用哈希

更容易
%cine={}
$cine{'A'}=37;
$letter="A"
print $cine{$letter}