文本文件包含分配的变量,如何保存在哈希中?

Text file contains the assigned variable, how to save in hash?

我编写了 perl 脚本,并分配了 $k="bag"。我在文本文件中写入 $k===1234,然后使用 perl 读取文件并将其保存在哈希中。但是我得到的输出就像 '$k' => '1234',但我希望得到 'bag' =>'1234'.

文本文件中的内容会自动保存为字符串?还是词?但我希望它在一个变量中。 因为有很多对需要保存在一个文件中?如果有新的一对,则需要更新。是否可以在文件中进行?或者我可以做什么?

当您在 Perl 中读取文件时,您将获得文件的内容。 Perl 将不会将文件内容解释为代码并且不会替换变量。

相反,您必须自己替换其中的变量——本质上,您将创建自己的模板语言。如果您只想替换标量变量,这通常相当容易。核心思想是您必须创建一个包含变量的散列(例如 my %variables = (k => "bag"),然后 运行 文件内容的正则表达式以替换变量的出现:$contents =~ s/$(\w+)/$variables{}/g.

但还有一些细节决定需要做出:

  • 什么时候应该扩展变量——直接在读取文件时,还是在文件结构被解析为散列之后?在稍后阶段扩展变量通常更安全,以防变量包含 === 分隔符。例如,在散列 table:

    的键和值中扩展变量
    my %expanded = map { s/.../.../gr } %parsed;
    

    注意使用 /r 标志,以便正则表达式替换 returns 替换结果而不是修改输入字符串,这里是隐式变量 $_ 由于使用 map 运算符.

  • 如果文件引用了一个不存在的变量会怎样?那么 die 和错误消息可能是有意义的。我们可以使用 /e 标志将代码包含在正则表达式替换的替换部分中:

    $contents =~ s{$(\w+)}{ $variables{} // die "Unknown variable: " }ge