使用 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;
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
目录中
我已经从 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;
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
目录中