Perl Mason语法验证

the*_*ors 4 validation syntax perl mason

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

例如:

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

<%args>
$args
</%args>

<%perl>
my $var = $args->{var};
</%perl>
Run Code Online (Sandbox Code Playgroud)

是一个有效的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.
Run Code Online (Sandbox Code Playgroud)

opt*_*nal 9

我看了一下Mason,我看到的第一件事就是 Mason :: App/mason.pl

$ mason junk.mason
Invalid attribute line '$args' at ./junk.mason line 6
Run Code Online (Sandbox Code Playgroud)

整洁吧?但这实际上是试图 运行代码,所以下一步是查看内部,稍微环顾四周后,我发现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 );
Run Code Online (Sandbox Code Playgroud)