I tried out your code, and it creates a nice spreadsheet. Thank you for providing your working code!
I'm not sure I understand your question. However.. If I was to write a function that takes your three values it would be thus:
sub Entry( $ $ $ $ ) {
my ( $row, $slno, $testid, $status ) = @_;
$worksheet->write( "A$row", $slno );
$worksheet->write( "B$row", $testid );
$worksheet->write( "C$row", $status );
}
and call it thus
# skip header row on Excel Spreadsheet
my @entries = (
[ "1", "00A", "pass" ],
[ "2", "01A", "fail" ],
[ "3", "01B", "fail" ],
[ "4", "02A", "pass" ],
);
for (my $i = 0; $i < @entries; $i++) {
my ( $slno, $testid, $status ) = @{$entries[$i]};
Entries( $i+2, $slno, $testid, $status );
}