rfb has asked for the wisdom of the Perl Monks concerning the following question:

playing with this code I found to serve auth requests for ncftpd, I'm wonder if there's a more elegant way to collect the values from pack,
original code
# cut from ncftpd_mysql_authd-1.1.tar.gz # Unpack the authentication message ($mType,$state,$duplicate,$rAddr,$hostname,$ipstr,$lAddr,$cfname +,$connectTime,$username,$passPrompt,$passwd,$uid,$gids[0],$gi ds[1],$gids[2],$gids[3],$gids[4],$gids[5],$gids[6],$gids[7],$gids[8],$ +gids[9],$gids[10],$gids[11],$gids[12],$gids[13],$gids[14],$gi ds[15],$gids[16],$gids[17],$gids[18],$gids[19],$gids[20],$gids[21],$gi +ds[22],$gids[23],$gids[24],$gids[25],$gids[26],$gids[27],$gid s[28],$gids[29],$gids[30],$gids[31],$gids[32],$ngids,$restricteduser,$ +homedir,$denied,$allowed,$quotaHardkB,$quotaSoftkB,$quotaHard NumFiles,$quotaSoftNumFiles,$quotaFlags,$ncftpdPrivate,$authdPrivate) += unpack('N N N a16 a64 a32 a16 a64 N a64 a256 a64 N N33 N N a128 N N N N N N N a256 a256',$decoded);
notice all tho's nasty $gids's receiving the N33? yea, I want to get rid of tho's

Replies are listed 'Best First'.
Re: how can I collect x many elements from an array?
by japhy (Canon) on Mar 09, 2001 at 04:50 UTC
    Use an array slice.
    ($x,@y[0..32],$z) = function();
      so that will work the other way around when I have to apply it back to pack?
Re: how can I collect x many elements from an array?
by a (Friar) on Mar 09, 2001 at 11:11 UTC
    You could unpack all 33 into a single var and then mess w/ it later:<code> (@gids) = split(//, $gids_string); <code>