my $var = "Hello";
my $Hello = "Hi";
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何在$ var中替换$ Hello的值?这里$ var包含字符串"Hello"(有一个名为$ Hello的变量).我正在寻找一种方法用变量$ Hello的值替换它.请让我知道我该怎么做?
DVK*_*DVK 14
这在Perl FAQ(7)中讨论:如何将变量用作变量名?.
简而言之,答案是:不要这样做.请改用哈希.
更长的回答:
一个更好,更简单的解决方案是将值存储在哈希中:
my %sayings = ("Hello" => "Hi");
my $key = "Hello";
my $var2 = $sayings{$key};
Run Code Online (Sandbox Code Playgroud)
你也可以使用eval:
my $var = "Hello";
my $Hello = "Hi";
print "1.$var\n";
my $var2 = eval "\$$var";
print "2.$var2\n";
Run Code Online (Sandbox Code Playgroud)
作为最后的手段,您可以使用符号引用.然而(正如上面链接的FAQ中所讨论的),它们只适用于全局变量,并且只有当`use strict'refs``不起作用时 - 它应该始终用于正常的Perl开发.
##############################################################
# This works. But only without "use strict" and on a package (global) variable.
##############################################################
no strict; # BOO! Bad coder!
my $var = "Hello";
$Hello = "Hi"; #Look, ma, GLOBAL VARIABLE! Bad Coder!
print "1.$var\n";
my $var2 = ${$var}; # You could use $$var shorthand
print "2.$var2\n";
# OUTPUT:
# 1. Hello
# 2. Hi
##############################################################
# I meant it about package (global variable)
##############################################################
no strict;
my $var = "Hello";
$Hello = "GLOBAL value";
my $Hello = "Hi";
print "1.$var\n";
my $var2 = ${$var}; # You could use $$var shorthand
print "2.$var2\n";
# OUTPUT - see how we don't get "Hi" on a second line
# If we did not assign "GLOBAL Value" to $Hellp on line 3
# , second line would contain no value at all (e.g. "2.")
# 1. Hello
# 2. GLOBAL value
##############################################################
# And, if you do what you SHOULDA done and used strict:
##############################################################
use strict; # Much better!
my $var = "Hello";
my $Hello = "Hi";
print "1.$var\n";
my $var2 = ${$var}; # You could use $$var shorthand
print "2.$var2\n";
# OUTPUT:
# Global symbol "$Hello" requires explicit package name at line 4.
# Execution aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)
PS如果您只想使用$Hello硬编码变量的值,您可以这样做$var2 = $Hello;,但我觉得您的意思是您想要使用$ var中包含的变量名称.
| 归档时间: |
|
| 查看次数: |
4859 次 |
| 最近记录: |