my (@where, @params ); push ( @where, 'item1 = ?' ); push ( @params, $item1 ); if ( defined( $item2 ) ) { push( @where, 'item2 = ?' ); push( @params, $item2 ); } if ( defined( $item3 ) ) { push( @where, 'item3 = ?' ); push( @params, $item3 ); } my $script = sprintf("SELECT foo FROM bar WHERE %s", join ( ' AND ', @WHERE ) ); ... $sql->execute( @params );