0

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

谢谢。

4

1 回答 1

2

(奇怪......我以前从未见过这类问题,然后在同一天在这里和PerlMonks上都出现了它的变体(它们的差异足以明显不仅仅是一个交叉帖子) 。)

你缺少的一点是

$hash{"hello"} = ["$blah", "$blah2"];

只需将和的复制到(引用的匿名数组)中。它不会在哈希和/之间创建任何持久的连接。$blah$blah2$hash{hello}$blah$blah2

作为旁注,该行中的引号都没有任何用途。它更常见地写成:

$hash{hello} = [$blah, $blah2];

或者,如果您想创建引用,以便永远链接$blah并且$hash{hello}[0]更改一个也会更改另一个:

$hash{hello} = [\$blah, \$blah2];

请注意,在这种情况下,您不能使用引号。虽然"$blah"and$blah是等价的,"\$blah"\$blah不是 -\$blah为您提供了对 的引用$blah,但"\$blah"为您提供了文字字符串“$blah”,根本不涉及任何变量。

于 2013-05-29T14:25:24.790 回答