I think the message means $worksheet is undefined, not one of the parameters.
And I think the real problem is because of all the extra my's in there.
my $workbook; # No need for the = ()
my $worksheet; # No need for the = ()
# Create output file with user filename:
if ($outfile ne "d") {
$workbook = Spreadsheet::WriteExcel->new($outfile); # No my, or $wo
+rkbook will go out of scope at the end of the if block
$worksheet = $workbook->add_worksheet(); # same here
print "What should we label the column containing the data?\n";
my $colname = <STDIN>;
chomp($colname);
$worksheet->write(0,"A",$colname);
}
# Other code here I assume
# Write 00 temperature data into file:
$read = 4+(($day-1)*58);
$temp = $xls->1{("B", $read)};
$row = $day + 1;
$worksheet->write($row,$col,$temp); # No my
$day = $day + 1;
Now $worksheet won't go out of scope after the if block, and the later code can still use it.