Rob Dixon wrote: > Kenton Brede wrote: > > __DATA__ > > user1:x:700:101:user1:/dev/null:/bin/false > > user2:x:706:101:user2:/dev/null:/bin/false > > user3:x:707:101:user3:/dev/null:/bin/false > > user4:x:708:101:user4:/dev/null:/bin/false > > Hi Kenton. > > How does this look? > > sub get_uid { > my %list; > @list{map {(split /:/)[2]} <DATA>} = (); > return (grep {not exists $list{$_}} 700 .. 799)[0]; > } > > More readably, this does almost the same thing:
I think there is a happy medium that harnesses the power of Perl's aggregate tools without the obscurity of the above: Greetings! E:\d_drive\perlStuff\JPEG>perl -w my @uid_list = map {(split /:/)[2]} (<DATA>); my %uid_list; @[EMAIL PROTECTED] = ([EMAIL PROTECTED]); my $free_number = 700; while ($free_number < 800) { last unless $uid_list{$free_number}; $free_number++; } print "$free_number\n"; __DATA__ user1:x:700:101:user1:/dev/null:/bin/false user2:x:706:101:user2:/dev/null:/bin/false user3:x:707:101:user3:/dev/null:/bin/false user4:x:708:101:user4:/dev/null:/bin/false ^Z 701 You can see the reason for my preference by adding the diagnostic line: print "$_: $uid_list{$_}\n" for keys %uid_list; at the end of each script. Of course, it doesn't really matter in the given context, but somehow I don't like the idea of hash elements hanging in that limbo of "existing but undefined". I also think that exploding the view of that one-liner better demonstrates each of its constituent features. Of course, it might better demonstrate the process of assignment to a hash slice to vary the names a bit and call the hash a hash: my %uid_hash; @[EMAIL PROTECTED] = ([EMAIL PROTECTED]); ... > sub get_uid { > > my %list; > > while(<DATA>) { > my $uid = (split /:/)[2]; > $list{$uid}++; > } > > foreach my $uid (700 .. 799) { > return $uid unless exists $list{$uid}; > } > > return undef; > } This is definitely the most straightforward approach. > > > HTH, > > Rob Joseph -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>