Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl配置文件eval中设置变量_Perl_Variables_Hash_Eval_Config - Fatal编程技术网

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

在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"

我有一个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";
}
但两张照片都显示了
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命令。因此,我考虑将字符串literal
blah
保留在值中,然后在需要时简单地更改
blah
的值。