【问题标题】:Perl Mason Syntax ValidationPerl Mason 语法验证
【发布时间】:2015-03-14 07:36:39
【问题描述】:

有没有办法在命令行验证 perl mason 语法?我知道对于常规的 perl 模块,您可以只使用 perl -c,但这会引发诸如 docstrings 之类的特定于 mason 的语法的错误...

例如:

<%doc>
DOCUMENTATION SHOULD NOT GET PARSED
</%doc>

<%args>
$args
</%args>

<%perl>
my $var = $args->{var};
</%perl>

是一个有效的 perl mason 文件,但对它运行 perl -c 会返回:

Semicolon seems to be missing at path/to/file.mc line 1.
syntax error at path/to/file.mc line 2, near "DOCUMENTATION S"
path/to/file.mc had compilation errors.

【问题讨论】:

  • 对于一个模块,你应该使用perl -e'use Module;'perl -c Module.pm 可能会导致问题。
  • 你可能是正确的。我是 perl 的新手,以前从未需要过这种命令。话虽如此,它绝对不适用于 mason *.mc 文件,而这正是我所需要的。
  • 并不是要暗示它。 Mason 不是 Perl,所以perl 无法执行。

标签: perl syntax validation mason


【解决方案1】:

我看了梅森一眼,第一眼看到的是Mason::App/mason.pl

$ mason junk.mason
Invalid attribute line '$args' at ./junk.mason line 6

整洁吧?但这实际上试图 运行 代码,所以下一步是查看内部,然后环顾四周,我发现 Mason::Interpload (path) 记录为

返回一个绝对组件对应的组件对象 路径,如果不存在,则为 undef。如果组件发生错误而死 由于语法错误而无法加载。

因此您可以调整 Mason::App 以加载而不是运行或制作您自己的简单版本

#!/usr/bin/perl --
use strict; use warnings; use Mason;
my $interp = Mason->new(
    comp_root => '/path/to/comps',
    data_dir  => '/path/to/data',
    ...
);
$interp->load( shift );

【讨论】:

  • 优秀,详细的答案!为高质量添加赏金(24 小时内不可奖励)。
  • 为自愿提供赏金而投票。
猜你喜欢
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多