【问题标题】:Execute perl script using mason template使用 mason 模板执行 perl 脚本
【发布时间】:2016-08-10 05:43:32
【问题描述】:

我已经从 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 执行了一个程序

【问题讨论】:

    标签: perl cpan mason


    【解决方案1】:

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

    • 当您使用use 导入 Mason 时,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 时,你指定一个组件根,所有组件 文件生活在。此后,任何组件将被其引用 相对于根目录的虚拟路径,而不是其完整文件名。

    例如,如果组件根是“/opt/web/comps”,那么 组件路径 '/foo/bar.mc' 指的是文件 '/opt/web/comps/foo/bar.mc'。

    【讨论】:

    • 不错的答案,+1 :)
    【解决方案2】:

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

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

    你需要更换

    • shebang 行 #!/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
    

    您将立即获得(无需任何配置)一个工作中的网络应用程序,您可以在浏览器中通过http://localhost:5000 访问它。您的component_root 将在myapp 目录中作为myapp/comps

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 2011-11-21
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多