0

/ etc /passwdユーザーを出力するPerlCGIスクリプトを作成しようとしていますが、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 に答える