Okay, after reading various documents online I have decided to try and write my code
using -w and strict.
So here is the problem. How do I pass Arrays to subs? I assume declaring everything
main:: would pretty much undermine the whole point of strict vars. So... for example
I have this sub which sends me mail if there is an error.
sub DieMsg
{
#Send mail to $admin in the event of an error
$diemessage = $_[0];
open( MAIL, "|$mailprog -i -t" ) || die "Cannot open sendmail\n" ;
print MAIL "To: $admin \n" ;
print MAIL "From: Status Script <status\@foxjet.com> \n" ;
print MAIL "Reply-to: $admin \n" ;
print MAIL "Subject: Status Script Error\n" ;
print MAIL "\n\n" ;
print MAIL "$diemessage\n\n";
print MAIL "--------------- HEADERS ---------------\n";
print MAIL @headers;
print MAIL "--------------- BODY ---------------\n";
print MAIL @body;
print MAIL "\n\n";
close(MAIL);
return 0 ;
}
Then in other parts of the program I have lines like...
$dbq = $query->execute or DieMsg("Error Inserting into Database: $query->errstr\n");
Of course this all goes to hell in a handbasket when I add -w and use strict.
I made a couple of scalars global that are used a lot (ie $main::admin) but otherwise
can't figure out how to pass the info around. I tried this...
sub DieMsg (@headers,@body)
{
#Send mail to $admin in the event of an error
my $diemessage = $_[0];
open( MAIL, "|$main::mailprog -i -t" ) || die "Cannot open sendmail\n" ;
print MAIL "To: $main::admin \n" ;
print MAIL "From: Status Script <status\@foxjet.com> \n" ;
print MAIL "Reply-to: $main::admin \n" ;
print MAIL "Subject: Status Script Error\n" ;
print MAIL "\n\n" ;
print MAIL "$diemessage\n\n";
print MAIL "--------------- HEADERS ---------------\n";
print MAIL @headers;
print MAIL "--------------- BODY ---------------\n";
print MAIL @body;
print MAIL "\n\n";
close(MAIL);
return 0 ;
}
But I still get
Global symbol "headers" requires explicit package name at ./status.pl line 21.
where line 21 is
print MAIL @headers;
So I am hoping one of you use strict advocates on here will tell me where I am going
wrong.
Thanks
Sheridan Saint-Michel