在perl配置文件eval中设置变量
我有一个perl脚本和一个.config文件,希望在配置文件中存储一些散列,并使用一些变量作为其值,然后从我的perl脚本中动态更改它们 配置文件:在perl配置文件eval中设置变量,perl,variables,hash,eval,config,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"
$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";
}
但两张照片都显示了helloworld代码>好像更改没有发生一样。。我错过什么了吗
谢谢。(奇怪……我以前从来没有见过这样的问题,然后在同一天,在这里和那里出现了各种各样的问题(这些问题的不同程度显然不仅仅是交叉帖子)
你错过的一点是
$hash{"hello"} = ["$blah", "$blah2"];
只需将$blah
和$blah2
的值复制到($hash{hello}
引用的匿名数组)。它不会在哈希和$blah
/$blah2
之间创建任何持久的连接
作为旁注,那一行中的引号没有任何用途。它通常写为:
$hash{hello} = [$blah, $blah2];
或者,如果您希望创建引用,以便永远链接$blah
和$hash{hello}[0]
,更改其中一个也会更改另一个:
$hash{hello} = [\$blah, \$blah2];
请注意,在这种情况下,不能使用引号。虽然“$blah”
和$blah
是等价的,“\$blah”
和\$blah
不是-\$blah
提供了对$blah
的引用,但是“\$blah”
提供了一个没有任何变量的文本字符串“$blah”。有这样的例子吗?perl新手。。谢谢另见:嗨,谢谢你的回答。不幸的是,我的实现需要在值周围加引号,它实际上是一个命令(但为了简单起见,我在这里省略了它们)。例如:$hash{“hello”}=[“somecommand$blah”,“somecommand2$blah2”]
。我一直在测试它的一些变体,包括\($blah)
(\$blah)
等等,但似乎都不起作用。它们要么弹出hello world
两次,而不是hello world
world hello
或error。在这种情况下,您必须分配$blah=(“somecommand$blah”的结果)
,并将其引用放入哈希中。无法对文本字符串进行可变引用。在这种情况下,如何替换字符串文本?我真的需要能够替换.config文件中的字符串文本并返回命令,而不需要实际更改.config中的数据,因为它是一个模板。通常的方法是分配给$hash{hello}
,而不是更改另一个变量并期望hash自动更新<代码>$blah=“world”$hash{hello}[0]=$blah
如果您想用命令的输出替换命令的文本,您可以使用类似于$hash{hello}[0]=run_命令($hash{hello}[0])的内容来简化此过程
甚至是@{$hash{hello}的$\=run_命令($\)代码>,但还不完全清楚这是否是您的最终意图。嗯,问题是我不想更改.config文件。这是因为可以使用不同的blah
多次调用$hash{“hello”}
s命令。因此,我考虑将字符串literalblah
保留在值中,然后在需要时简单地更改blah
的值。