【问题标题】:Perl CGI scrolling list wont print array of HashPerl CGI 滚动列表不会打印哈希数组
【发布时间】:2012-04-17 00:39:12
【问题描述】:

我正在尝试编写一个打印 /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);

【问题讨论】:

    标签: arrays perl hash cgi


    【解决方案1】:

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

    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,
    );
    

    【讨论】:

    • @Trance339,在我的答案中添加了代码的清理版本。
    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2015-01-09
      • 2020-10-16
      • 2013-06-24
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多