首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unix and Passwd::Unix

Unix and Passwd::Unix
EN

Stack Overflow用户
提问于 2013-06-30 17:00:21
回答 2查看 200关注 0票数 3

我试图返回这个perl脚本上的Unix用户列表。我正在使用带Passwd::Unix的Mojolicious。

参考文献:

  • 莫若利(http://metacpan.org/pod/Mojolicious)
  • Passwd::Unix (http://metacpan.org/pod/Passwd::Unix)

这是我的密码:

test.pl

代码语言:javascript
复制
#!/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>

但是它没有返回用户,而是只打印用户总数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-01 02:02:53

基于Jason的评论,您可以创建一个提供P::U实例的助手,然后从模板中调用它,如下所示:

代码语言:javascript
复制
#!/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>

实际上,您可以做一个返回所有用户的助手:

代码语言:javascript
复制
#!/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表单作为模板进行了辩论,但决定不让问题复杂化。尽管如此,如果您选择这样做,下面是如何执行模板:

代码语言:javascript
复制
@@ test.html.ep

%= tag ul => begin
  % foreach my $user (users) {
    %= tag li => $user
  % }
% end

但话又说回来,我个人是Mojo::模板TagHelpers表单的忠实粉丝,我知道这并不适合每个人。

票数 5
EN

Stack Overflow用户

发布于 2013-06-30 17:28:50

$pu->users返回所有用户的数组。将该返回值赋值给

代码语言:javascript
复制
my $users = $pu->users;

将数组置于标量上下文中,这将返回数组的大小。

相反,将结果分配给一个数组,并将对该数组的引用放在存储区中:

代码语言:javascript
复制
my @users = $pu->users;
$self->stash( users => \@users );

或者,您可以使用匿名数组引用,如下所示:

代码语言:javascript
复制
$self->stash( users => [ $pu->users ] );

在模板中,您必须取消对数组的引用,以遍历它:

代码语言:javascript
复制
__DATA__

@@ test.html.ep
<ul>
  <% foreach my $user (@$users) { %>
  <li><%= $user %></li>
  <% } %>
</ul>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17392736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档