On Mon, Jul 21, 2003 at 02:38:20PM -0700, Andrew Hurst wrote:
> At 01:22 PM 7/21/2003 -0800, Dennis Stout wrote:
> >> >"Dennis Stout" wrote ...
> >> > my %user_list = get_users($where);
> >> >
> >> > foreach (keys %user_list) {
> >> > my $user = $_;
> >> > foreach (@{$user_list{$user}{DOMAIN}}) {
> >> > $user_list{$user}{DOMAINS} .=
> >> >"$user_list{$user}{DOMAIN}[$_],";
> >> > }
> >> > chop($user_list{$user}{DOMAINS});
> >> >...
> >>
> >> >$user_list{$user}{DOMAINS} .= "$user_list{$user}{DOMAIN}[$_],";
> >>
> >> That line is the culprit. $_ contains each domain name as a text
> >> string. Which evaluates to 0 when used as an integer, which then gives
> >the
> >> first entry in the array. Thus you get the first entry in the array as
> >> many times as you have entries in the array. Try changing that to a
> >> regular (indexed) for loop and that should fix it.
> >
> >Good eye, I was too busy thinking of hashes and things.
> >
> >I hate array's.
> >
> >Should just be $user_list{$user}{DOMAINS} .= "$_,"; huh?
>
> Yep. After I sent the last email I realized that suggesting an indexed
> for loop was more effort than just deleting part of the string already
> there, like you just suggested.
This would be a good place for a join (perldoc -f join):
$user_list{$user}{DOMAINS} = join ',', @{$user_list{$user}{DOMAIN}};
which lets you do away with the trailing chop() as well.
Since this has nothing to do with mod_perl, if you must reply, please
do it off-list.
Eric