0

我正在尝试编写一个打印 /etc/passwd 用户的 Perl CGI 脚本,但是当我打开我的 CGI 时,我的滚动列表只打印出多行:

"HASH(0x27836d8)"

这是我的代码,我在其中获取 etc passwd 并将其打印到滚动列表。谁能帮我把它正确打印到滚动列表中?

setpwent();
while (@list = getpwent())
{
    ($LOGIN,$PASSWORD,$UID,$GID,$QUOTA,$COMMENT,$GECOS,$HOMEDIR,$SHELL) = @list[0,1,2,3,4,5,6,7,8];
    if( $UID >= 1001 )
    {
            push @users, { login => "$LOGIN"};
    }
}
endpwent();

print scrolling_list(-name=>'user_list',
                            -values=>[@users],
                            -size=>15);
4

2 回答 2

3

您给列表提供了一堆哈希引用,所以这就是显示的内容。改变

push @users, { login => "$LOGIN"};

push @users, $LOGIN;

use strict;
use warnings;

...

setpwent();
while (my @list = getpwent()) {
    my ($user, $uid) = @list[2, 3];
    push @users, $user
        if $ui >= 1001;
}
endpwent();

print scrolling_list(
   -name   => 'user_list',
   -values => \@users,
   -size   => 15,
);
于 2012-04-16T16:36:29.423 回答
2

CGI perldoc中所述,您使用 -values 传递的内容应该是一个列表引用,但是您已经为哈希列表创建了一个列表引用(由于您使用了上面的花括号)。这是一个固定版本:

    setpwent();
    while (@list = getpwent())
    {
        ($LOGIN,$PASSWORD,$UID,$GID,$QUOTA,$COMMENT,$GECOS,$HOMEDIR,$SHELL) = @list[0,1,2,3,4,5,6,7,8];
        if( $UID >= 1001 )
        {
                push @users, $LOGIN;
        }
    }
    endpwent();

print scrolling_list(-name=>'user_list',
                            -values=>\@users,
                            -size=>15);
于 2012-04-16T16:39:12.043 回答