使用mason模板执行perl脚本

时间:2016-08-10 05:43:33

标签: perl cpan mason

我已经从cpan安装了Mason模块。现在我正在使用mason模板执行我的第一个程序。

first_mason.mc

% my $name = "Mason";
    Hello world! Welcome to <% $name %>. 

first_mason.pl

#!/usr/local/bin/perl
use Mason;
my $mason = Mason->new(comp_root => '...');
print $mason->run('first_mason.mc')->output;

这会抛出错误,如下所示

  

first_mason.mc不是C的绝对路径:/Perl/site/lib/Mason/Request.pm第256行**

注意

我将这两个文件放在安装了mason的路径中(查找安装路径,我使用perldoc -l Mason)并使用perl first_mason.pl执行程序

2 个答案:

答案 0 :(得分:2)

无需将文件放在安装Mason的目录中:

  • 当您使用use导入时,Perl应该知道在哪里找到Mason(假设您的perl安装正确)。
  • Mason将通过comp_root参数知道在哪里找到.mc文件。
  • 需要将组件名称指定为相对于comp_root的路径,始终以/开头。
  • 您需要从组件名称中省略.mc

因此,如果将2个文件放在主目录中,则脚本应如下所示:

#!/usr/local/bin/perl
use Mason;
my $mason = Mason->new(comp_root => $HOME_DIR); # where $HOME_DIR is `C:\User\your_name`
print $mason->run('/first_mason')->output;

来自documentation

  

组件根目录和组件路径

     

使用Mason时,指定所有组件的组件根   文件住在。此后,任何组件将由其引用   相对于根的虚拟路径,而不是其完整文件名。

     

例如,如果组件根是&#39; / opt / web / comps&#39;,那么   组件路径&#39; /foo/bar.mc'指的是文件   &#39; /opt/web/comps/foo/bar.mc'

答案 1 :(得分:1)

@stevenl完全回答你的问题。不要盲目地从Mason文档中复制概要,也需要阅读文档。 :)例如在示例代码中:

#!/usr/local/bin/perl
use Mason;
my $mason = Mason->new(comp_root => '...');
print $mason->run('/foo')->output;

你需要更换

  • shebang line #!/usr/local/bin/perl以及perl解释器的真实路径
  • '...'文件系统中的实际路径,例如
comp_root => '/some/real/path/here/where/my/component/root/is'

但是,我写这个答案的主要原因是:如果您想将Mason用于 web-app 开发,请检查Poet模块。它极大地简化了整个过程,您不需要关心许多事情。例如。安装Poet之后,您可以简单地:

poet new MyApp
myapp/bin/run.pl

您将立即获得(没有任何 配置)WORKING网络应用,您可以在浏览器http://localhost:5000访问它。您的component_root将位于myapp目录中myapp/comps