my @ref; my @names = $username = $mem_info[2]; #Scalar assignment returns the assigned value, you can use it. my $base_sql=q{SELECT username,status FROM members WHERE referral }; while (@names) { #No scalar() needed - boolean context is just a special kind of scalar context. my $sql=$base_sql.($#names?'in ('.join(',',map('?',@names)).')':'=?'); my $sth=$dbh->prepare($sql); my $rv=$sth->execute(@names); my $res = $sth->fetchall_arrayref(); @names=map($_->[0],@$res); #Use map to map by each value of the array, instead of by indices. push @ref, join '|',map("$_->[0]=$_->[1]",@$res) if @$res; #@names contains as many values as @$res does. last if $#ref == 2 ; }