Perl 将字符串识别为标量变量
Posted
技术标签:
【中文标题】Perl 将字符串识别为标量变量【英文标题】:Perl recognise string as scalar variable 【发布时间】:2013-02-19 11:13:42 【问题描述】:我有名为$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
的数值?
【问题讨论】:
【参考方案1】:使用符号引用是个坏主意。相反,您应该使用哈希。设置,说%cine
并使用$cineA
代替$A_cine
等。然后你可以写
sub subroutine
my ($view) = @_;
my $cine = $cine$view;
...
【讨论】:
【参考方案2】:您正在尝试构造一个symbolic reference。
sub display
my $letter = $_[0];
no strict 'refs';
my $cine = $ $letter . "_cine" ;
print $cine, "\n"; # for example
为此目的使用散列几乎总是更好。有关详细信息,请参阅 Mark Dominus(Higher Order Perl 的作者)的三部分系列,了解为什么使用符号引用可能很危险。
Why it’s stupid to ‘use a variable as a variable name’ A More Direct Explanation of the Problem What if I’m Really Careful?【讨论】:
【参考方案3】:你可以像上图那样做一个符号引用,但通常使用散列更容易
%cine=
$cine'A'=37;
$letter="A"
print $cine$letter
【讨论】:
以上是关于Perl 将字符串识别为标量变量的主要内容,如果未能解决你的问题,请参考以下文章