【发布时间】:2016-04-21 21:30:58
【问题描述】:
我编写了自己的 Perl 预处理器——当然是在 Perl 中。
我有一个包含有效 Perl 语法的模板文件,除了这样的语句
$VAR{ 'LABEL' } =
#include dir/PRECOMPILED.pl
;
其中PRECOMPILED.pl 包含使用 Data::Dumper 生成的匿名哈希,例如
{
'a' => 1,
'b' => 2,
}
当我预处理模板时,它会将PRECOMPILED.pl 包含到模板中并生成一个具有有效 Perl 语法的新文件。
有没有一种好方法可以让上面的模板行也成为有效的 Perl 程序语句,这样如果预处理器没有运行,我可以稍后在程序中检查 $VAR{ 'LABEL' } 是否有内容?
例如
if( $VAR{ 'LABEL' } ){
# do something
}
【问题讨论】:
-
“有没有一种好方法可以使上面的模板行也成为有效的 perl 程序语句,这样如果预处理器没有运行......”
$VAR{'LABEL'} = ;不是有效的 Perl 语句,所以你如果你不运行你的预处理器,总是会出现语法错误。一般来说,首先生成 Perl 代码并不是一个好主意。你为什么要这样做? -
速度。预编译部分是转换成 perl 数据结构的大型 yaml 文件。yaml 文件包含由 perl 程序解释的语句,因此有两个级别的代码生成。其他开发人员只需编辑 yaml 文件,脚本就会自动将所有内容组合在一起。
-
您指的是 perl 的
-P命令行选项,它允许您将 Perl 源代码作为第一次通过 C 预处理器? perl5120delta 说 “Perl 的命令行开关“-P”,在 5.10.0 版本中被弃用,现在已被删除。”,所以它是一个不受支持的功能九年前已弃用,六年前已删除。你应该找到更好的方法。我建议您的数据应该即时解码您的 YAML 文件,或者创建一个适当的 Perl 模块 -
我编写了自己的 perl 预处理器。当然,在 perl 中。如果我使用即时方法,程序需要 3-4 更长的时间。
-
@user2585500:我猜它们是相当大的 YAML 文件。您是否尝试过YAML::XS,它可能会更快?我建议您按照我所说的将 YAML 预处理为 Perl 模块,并且只需
use它们而不是涉及您的预处理器。它开始听起来像一个永久数据库是有序的,这对启动时间只有很小的影响,根本没有导入
标签: perl preprocessor