4

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

例如:

<%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.
4

1 回答 1

10

我看了一下 Mason,首先看到的是 Mason::App / mason.pl

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

整齐吧?但这实际上是在尝试 运行代码,所以下一步是查看内部,然后环顾四周,我发现Mason::Interp具有负载(路径),它被记录为

返回对应于绝对组件路径的组件对象,如果不存在则返回 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 );
于 2015-01-17T03:11:54.560 回答