I believe
Fletch is right about the NULLs. The "concatentation" in your error message comes from interpolating the results into the string in this line:
print FILE ">$giName $gssName $definition\n$sequence";
One easy way to turn undef's into reasonable values is this idiom:
$giName ||= " ";
I don't see a lot to optimize, but here are my suggestions:
# makes array interpolate with newlines
local $" = "\n";
# Pull my variable declarations outside the inner loop.
my ($giName, $gssName, $definition, $sequence, @seq);
while (($giName, $gssName, $definition, $sequence) = $sth2->fetchro
+w_array )
{
$sequence = uc( $sequence );
# If I'm right about your data, you just want to
# turn the whitespace into newlines.
# The following should be faster.
@seq = split /\s+/,$sequence;
# For any fields that can be null:
$giName ||= " ";
# Less interpolation will be faster, but we need it
# for the array.
print FILE ">",$giName," ",$gssName," ",$definition,"\n","@seq",
+"\n";
}