2015-01-15 40 views
4

有沒有辦法在命令行驗證perl梅森語法?我知道你可以使用perl -c普通Perl模塊,而是拋出梅森特定錯誤的語法像文檔字符串和...Perl梅森語法驗證

例如:

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

<%args> 
$args 
</%args> 

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

是一個有效的perl的石匠文件,但運行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. 
+3

對於一個模塊,你應該使用'perl的-e'use模塊;'' 。 'perl -c Module.pm'會導致問題。 – ikegami

+0

你可能是正確的。我是perl的新手,從來沒有需要過這種命令。這就是說,它絕對不適用於mason * .mc文件,這正是我需要的。 – therealmitchconnors

+0

並不意味着暗示它。梅森不是Perl,所以'perl'不能執行它。 – ikegami

回答

8

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

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

整潔吧?但是,這實際上是嘗試運行的代碼,所以下一步就是進去看看,過一小環顧四周,我發現Mason::Interp具有load (path)被記錄爲

返回對應於絕對組件的組件對象如果不存在,則爲 path或undef。如果組件 由於語法錯誤而無法加載,則會發生錯誤,並顯示錯誤。

所以,你可以適應泥工::應用程序加載,而不是運行或使自己的簡單的版本是這樣

#!/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); 
+1

優秀的,詳細的答案!爲高品質添加賞金(24小時不獎勵)。 – therealmitchconnors

+0

Upvoting自願提供賞金。 –