我有一个perl脚本和一个.config文件,并希望在配置文件中存储一些哈希值,并将一些变量作为其值,然后从我的perl脚本中动态更改它们。
配置文件:
$hash{"hello"} = ["$blah", "$blah2"];
我的perl脚本:
if (-e ".config")
{
$blah = "hello";
$blah2 = "world!";
eval ('require(".config")');
$val1 = $hash{"hello"}[0];
$val2 = $hash{"hello"}[1];
print "$val1 $val2\n";
# Now I want to CHANGE blah and blah2
$blah = "world!";
$blah2 = "hello";
$val1 = $hash{"hello"}[0];
$val2 = $hash{"hello"}[1];
print "$val1 $val2\n";
}
但两张照片都显示hello world!
,好像没有发生变化..我错过了什么吗?
感谢。
答案 0 :(得分:2)
(奇怪......我之前从未见过这种类型的问题,然后在这里和PerlMonks上出现了它的变化(这些变化不同,显然不仅仅是一个交叉的帖子)在同一天。)
你缺少的是
$hash{"hello"} = ["$blah", "$blah2"];
只需将$blah
和$blah2
的值复制到({1}}引用的匿名数组中。它不会在哈希与$hash{hello}
/ $blah
之间建立任何持久的联系。
作为附注,该行中的引号都没有任何用途。它通常写成:
$blah2
或者,如果您想要创建引用,以便$hash{hello} = [$blah, $blah2];
和$blah
永久链接,更改其中一个也会更改另一个:
$hash{hello}[0]
请注意,在这种情况下,您不得使用引号。虽然$hash{hello} = [\$blah, \$blah2];
和"$blah"
是等效的,$blah
和"\$blah"
不是 - \$blah
为您提供\$blah
的引用,但是$blah
}给你文字字符串“$ blah”,根本不涉及任何变量。