Perl Mason 语法验证

Perl Mason Syntax Validation

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

例如:

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

<%args>
$args
</%args>

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

是一个有效的 perl mason 文件,但是 运行 perl -c 反对它 returns:

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.

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

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

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

Returns the component object corresponding to an absolute component path, or undef if none exists. Dies with an error if the component fails to load because of a syntax error.

所以你可以调整 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 );