我试图返回这个perl脚本上的Unix用户列表。我正在使用带Passwd::Unix的Mojolicious。
参考文献:
这是我的密码:
test.pl
#!/usr/bin/env perl
use Mojolicious::Lite;
use Passwd::Unix;
# Instance
my $pu = Passwd::Unix->new();
get '/' => sub {
my $self = shift;
my $users = $pu->users;
$self->stash(
users => $users
);
} => 'test';
app->start;
__DATA__
@@ test.html.ep
<ul>
<% foreach my $user ($users) { %>
<li><%= $user %></li>
<% } %>
</ul>
但是它没有返回用户,而是只打印用户总数。
发布于 2013-06-30 18:02:53
基于Jason的评论,您可以创建一个提供P::U实例的助手,然后从模板中调用它,如下所示:
#!/usr/bin/env perl
use Mojolicious::Lite;
use Passwd::Unix;
# Instance
helper pu => sub { state $pu = Passwd::Unix->new };
get '/' => 'test';
app->start;
__DATA__
@@ test.html.ep
<ul>
% foreach my $user (pu->users) {
<li><%= $user %></li>
% }
</ul>
实际上,您可以做一个返回所有用户的助手:
#!/usr/bin/env perl
use Mojolicious::Lite;
use Passwd::Unix;
# Instance
helper users => sub { Passwd::Unix->new->users };
get '/' => 'test';
app->start;
__DATA__
@@ test.html.ep
<ul>
% foreach my $user (users) {
<li><%= $user %></li>
% }
</ul>
另外:我对使用TagHelpers表单作为模板进行了辩论,但决定不让问题复杂化。尽管如此,如果您选择这样做,下面是如何执行模板:
@@ test.html.ep
%= tag ul => begin
% foreach my $user (users) {
%= tag li => $user
% }
% end
但话又说回来,我个人是Mojo::模板和TagHelpers表单的忠实粉丝,我知道这并不适合每个人。
发布于 2013-06-30 09:28:50
$pu->users
返回所有用户的数组。将该返回值赋值给
my $users = $pu->users;
将数组置于标量上下文中,这将返回数组的大小。
相反,将结果分配给一个数组,并将对该数组的引用放在存储区中:
my @users = $pu->users;
$self->stash( users => \@users );
或者,您可以使用匿名数组引用,如下所示:
$self->stash( users => [ $pu->users ] );
在模板中,您必须取消对数组的引用,以遍历它:
__DATA__
@@ test.html.ep
<ul>
<% foreach my $user (@$users) { %>
<li><%= $user %></li>
<% } %>
</ul>
https://stackoverflow.com/questions/17392736
复制