我有名为$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
的数值?
答案 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}