【问题标题】:Embed perl inside YAML file在 YAML 文件中嵌入 perl
【发布时间】:2013-07-16 00:36:44
【问题描述】:

我想创建 YAML 配置。我可以在其中放入 perl 代码的文件,以减少多次编写相同块的工作量。或用于任何其他操作。我想在我的 YAML 文件中包含这样的内容:

---
    `my $a = 1;`
    `if($a){`
    foo: bar
    `}else{`
    foo: baz
    `}
...

很明显,在本例中,我希望为键 'foo' 分配值 'bar'。

这是个好主意还是坏主意?如果是后者,编写该文件的最佳方法是什么以及该文件的预处理器?

【问题讨论】:

  • 我认为这不是一个好主意。这会将一个简单的标记(就像 XML - 简单? - 或 JSON)变成一个需要自定义处理并可能引入安全漏洞的科学怪人。也许 YAML 可以根据 YAML 中的不同 keys 对不同的属性进行编码?例如,也许有一个“调试”键和一个“生产”键?然后,YAML 使用者将选择适当的密钥(例如,在 $a 中的任何内容上)。另一方面,如果这仅用于构建配置,则在构建/部署过程中单独处理(甚至是旧的 CPP)。
  • 我不得不承认这是个坏主意。如果你真的想在配置文件中有“可执行的 perl”,为什么还要让 YAML 参与进来呢?转到eval 文件的内容,并期望它返回一个哈希引用。不完全安全,但如果你在一个封闭的环境中,它可以工作。

标签: perl embed yaml


【解决方案1】:

这不是一个好主意,但可以做得更好。

你有两种方法:

  1. 将您的 YAML / JSON 文件视为标准 Perl 模板系统之一的模板。

    在我看来,Embperl 是一个很好的候选者,但那是因为它是我非常熟悉的。任何支持控制流的模板框架都适合。

    这样,您无需编写自己的语言/语法;并且您会以纯形式获得最终生成的 YAML/XML/JSON,因此无需自定义解析器。

  2. 创建基于 Perl 的格式。

    例如您的配置是一大块 Perl 代码,本质上是一个可评估(或 do-able)的代码块,导致配置哈希。

    结果哈希结构可以是任何你想要的,但如果你希望它是,它可以镜像原始 JSON/YAML,并且可以使用标准转换工具转换为一个。

【讨论】:

    猜你喜欢
    • 2020-01-06
    • 2012-03-20
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多