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 将字符串识别为标量变量的主要内容,如果未能解决你的问题,请参考以下文章

perl 第五弹 变量 I

Perl中的标量介绍

perl 第六弹 变量 II

5-Perl 变量

Perl语言学习,不要停哟~~

为什么不等于将我的变量识别为与传递它的字符串相同的字符串?