in reply to Strange loop output

Don't print your array within the loop. Instead wait until you're loop is finished before printing it.

Otherwise, you'll just get each subsequent build on the @array showing the duplicate items

On a side note, add error checking to your database connect and the execution of your statement handle. Also if you use placeholders, you can prepare your statement handle just once

my $dsn = "dbi:$platform:$database:$host:$port"; my $connect = DBI->connect($dsn, $user, $pw) or die "DB connect failed: $DBI::errstr"; my $query_handle = $connect->prepare(q{SELECT count(episode) from show +s where episode=?}); foreach my $k (@shows_array) { my ($show_id, $title, $next_episode) = split /\|/, $k; $query_handle->execute($next_episode) or die $connect->errstr; $query_handle->bind_columns(\my $episode); if($episode eq "0") { my $get_file = "$url$title $next_episode&catid=$catid&num=$num +&age=$age&username=$username&$apikey"; push @nzb_list, $get_file; } } print @nzb_list;

Replies are listed 'Best First'.
Re^2: Strange loop output
by packetstormer (Monk) on Apr 21, 2011 at 08:13 UTC
    It doesn't seem to matter where I print. I just took it out of the loop and the same problem occurs!
      Actually - it does matter where I print it! Moving it outside the loop makes it work correctly - thanks. I didn't know, and still don't, how that makes a difference!

        Consider a very simple loop like this:

        my @a; for (qw/a b c/) { push @a, $_; print (join ', ', @a), "\n"; }

        In the first iteration, @a contains a, so the output is

        a

        In the second iteration, @a contains a, b, so the total output is

        a # output from previous iteration a, b # output from current iteration

        In the third iteration it will print a, b, c, so you'll see a total of three a in the output - probably the duplicates you complained about.

        If you move the print out of the loop, you just get a, b, c because that's what @a contains.