in reply to More loop issues

You need more subs, less global variables, subs that take arguments and return values, subs with meaningful names, with no numbers in the name

When you write programs like this they're easy to read and "loop issues" solve themselves

while( $row = $sth->fetchrow_hashref) { my($con, $job, $pic) = GetContactJobPic( $dbh, $row->{jobtype} ); MailNotifyConJobPic( $row->{email}, $con, $job, $pic, ... ); } ... sub GetContactJobPic { my( $dbh, $jobtype ) = @_; my $hashref = $dbh->selectrow_hashref( q{Select * from database where jobtype=? AND active='yes' ORDER BY + RAND() LIMIT 1}m {}, $jobtype ); return @{$hashref}{qw' contact jobnum picture'}; } sub MailNotifyConJobPic { my( $mail, $con, $job, $pic, ... ) = @_; ... ## Mail::Sendmail or ... }

Also placeholders are always a good idea bobby-tables.com: A guide to preventing SQL injection in Perl

Also because that sendmail stuff is still part of the code you posted, others who read this node should also heed caution

  • Comment on Re: More loop issues (more well named subs that take args return values, less global vars, placeholders)
  • Download Code

Replies are listed 'Best First'.
Re^2: More loop issues (more well named subs that take args return values, less global vars, placeholders)
by stevieb (Canon) on Jun 11, 2016 at 01:46 UTC
    If we're warning, we should also remind about  use strict; and  use warnings; again, and to stop using perl4 type sub calls... The & is not needed.