首页 文章

使用mason模板执行perl脚本

提问于
浏览
2

我从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;

这将抛出 error 如下

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

Note

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

2 回答

  • 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
    

    并且您将立即获得(没有 any 配置)WORKING网络应用程序,您可以在浏览器中访问http://localhost:5000 . 您的 component_root 将作为 myapp/comps 位于 myapp 目录中 .

  • 2

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

    • Perl应该知道在使用 use 导入时找到Mason的位置(假设您的perl安装正确) .

    • 梅森将通过 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' .

相关问题