使用 mason 模板执行 perl 脚本

Execute perl script using mason template

我已经从 cpan 安装了 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 is not an absolute path at C:/Perl/site/lib/Mason/Request.pm line 256**

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

执行了一个程序

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

  • 当您使用 use 导入 Perl 时,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

The component root and component paths

When you use Mason, you specify a component root that all component files live under. Thereafter, any component will be referred to by its virtual path relative to the root, rather than its full filename.

For example, if the component root is '/opt/web/comps', then the component path '/foo/bar.mc' refers to the file '/opt/web/comps/foo/bar.mc'.

@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/comps.

myapp 目录中