文本文件包含分配的变量,如何保存在哈希中?
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
我编写了 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