Perl CGI滚动列表不会打印哈希数组

时间:2012-04-16 16:28:09

标签: arrays perl hash cgi

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

"HASH(0x27836d8)"

这是我的代码,我抓住了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);

2 个答案:

答案 0 :(得分: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,
);

答案 1 :(得分:2)

the 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);
相关问题