与this question相关,我想知道在仅使用核心模块的情况下在Perl中填写简单XML模板的最佳方法是什么 - 在我的案例中我不能使用额外的模块。有什么想法吗?
答案 0 :(得分:1)
您可以使用替换s///
运算符和eval evaluate /ee
修饰符来创建非常简单的内容。
像这样的东西
use strict;
use warnings;
my $template = <<'END';
<file>
<state>$state</state>
<timestamp>$time</timestamp>
<location>$location</location>
</file>
END
my $state = 'Oregon';
my $time = '10:04';
my $location = 'Salem';
(my $output = $template) =~ s{(\$\w+)}{ $1 }eeg;
print $output;
<强>输出强>
<file>
<state>Oregon</state>
<timestamp>10:04</timestamp>
<location>Salem</location>
</file>
答案 1 :(得分:1)
Borodin的明显推论表明解决方案是使用哈希来初始化您的数据。鉴于他通过将正则表达式的LHS限制为单词字符来保护您,这在功能上是相同的。但是使用哈希可能是更好的做法,因为只有那些你想要导入到模板中的变量才是。
此外,使用此方法可以获得稍微好一点的错误消息:
use strict;
use warnings;
my $template = <<'END';
<file>
<state>$state</state>
<timestamp>$time</timestamp>
<location>$location</location>
</file>
END
my %data = (
state => 'Oregon',
time => '10:04',
location => 'Salem',
);
(my $output = $template) =~ s{\$(\w+)}{
$data{$1} // die "Variable '$1' from template not initialized"
}eg;
print $output;