仅来自核心模块的Perl简单XML模板?

时间:2014-03-19 11:10:40

标签: xml perl

this question相关,我想知道在仅使用核心模块的情况下在Perl中填写简单XML模板的最佳方法是什么 - 在我的案例中我不能使用额外的模块。有什么想法吗?

2 个答案:

答案 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;