在perl配置文件eval中设置变量

时间:2013-05-29 11:48:03

标签: perl variables hash eval config

我有一个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!,好像没有发生变化..我错过了什么吗?

感谢。

1 个答案:

答案 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”,根本不涉及任何变量。