Perl基于模板生成文件

Perl基于模板生成文件,perl,perl-module,Perl,Perl Module,我正在处理一个用例,该用例要求我基于模板生成.hpp文件。大概是 #ifdef changethis_hpp #define changethis_hpp #include<fixedheader1> ... #include<fixedheaderN> class changethis { .... }; #如果DEF更改此水电站 #定义该水电站 #包括 ... #包括 阶级变革 { .... }; 需要根据changethis字符串的要求生成。 如何在perl

我正在处理一个用例,该用例要求我基于模板生成.hpp文件。大概是

#ifdef changethis_hpp
#define changethis_hpp

#include<fixedheader1>
...
#include<fixedheaderN>

class changethis
{
....
};
#如果DEF更改此水电站
#定义该水电站
#包括
...
#包括
阶级变革
{
....
};
需要根据
changethis
字符串的要求生成。 如何在perl中实现这一点

WHITSF 我编写了一个fixed template.txt文件,然后将文本替换为
changethis
字符串,然后将其作为changethis.hpp转储

但是在perl中还有其他方法可以实现这一点吗?

我用于此类任务。

我用于此类任务。

有一个perl常见问题解答。它是这样开始的:

如果可以避免,不要,或者如果可以使用模板系统, 例如,或Toolkit,请改为这样做。 您甚至可以使用
sprintf
printf
完成工作:

my $string = sprintf 'Say hello to %s and %s', $foo, $bar;
但是,对于一次过的简单情况,我不想退出 完整的模板系统,我将使用一个包含两个Perl标量的字符串 其中的变量。在本例中,我想将
$foo
$bar
展开为 其变量的值:

my $foo = 'Fred';
my $bar = 'Barney';
$string = 'Say hello to $foo and $bar';
一种方法是使用替换运算符和双精度
/e
旗帜第一个
/e
在替换侧计算
$1
,并将其旋转 进入
$foo
。第二个
/e
$foo
开头,并用其 价值观<代码>$foo,然后变成“Fred”,这就是最后剩下的内容 字符串:

$string =~ s/(\$\w+)/$1/eeg; # 'Say hello to Fred and Barney'
/e
也会默默地忽略违反严格的 具有空字符串的未定义变量名。因为我使用的是
/e
flag(两倍偶数!),我也有同样的安全问题 以字符串形式求值。如果
$foo
中有什么奇怪的地方,也许 类似于
@{[system“rm-rf/”]}
,这样我就可以自己进去了 麻烦

我强烈建议您忽略大部分建议,直接转到模板系统(如第一行中所建议的)。

这里有一个Perl常见问题解答。它是这样开始的:

如果可以避免,不要,或者如果可以使用模板系统, 例如,或Toolkit,请改为这样做。 您甚至可以使用
sprintf
printf
完成工作:

my $string = sprintf 'Say hello to %s and %s', $foo, $bar;
但是,对于一次过的简单情况,我不想退出 完整的模板系统,我将使用一个包含两个Perl标量的字符串 其中的变量。在本例中,我想将
$foo
$bar
展开为 其变量的值:

my $foo = 'Fred';
my $bar = 'Barney';
$string = 'Say hello to $foo and $bar';
一种方法是使用替换运算符和双精度
/e
旗帜第一个
/e
在替换侧计算
$1
,并将其旋转 进入
$foo
。第二个
/e
$foo
开头,并用其 价值观<代码>$foo,然后变成“Fred”,这就是最后剩下的内容 字符串:

$string =~ s/(\$\w+)/$1/eeg; # 'Say hello to Fred and Barney'
/e
也会默默地忽略违反严格的 具有空字符串的未定义变量名。因为我使用的是
/e
flag(两倍偶数!),我也有同样的安全问题 以字符串形式求值。如果
$foo
中有什么奇怪的地方,也许 类似于
@{[system“rm-rf/”]}
,这样我就可以自己进去了 麻烦

我强烈建议您忽略大部分建议,直接使用模板系统(如第一行中的建议)