roboticus wrote:
If you check the docs (perldoc -f die), you'll see that's the intended behavior. ...
Actually, I did read the perldoc for die and the only thing I saw about stringification was this:
Because Perl stringifies uncaught exception messages before display, you'll probably want to overload stringification operations on exception objects.
That isn't exactly obvious that it has anything to do with @_ or that die() is doing anything or what the intended behavior is with respect to @_.
... It's not "bad practice" to pass in a list.
The reason I asked about "bad practice" is shown in the example below. Passing a list to a parameter will cause the second element of the list to go to the next parameter. In the original example it appears that @_ is always just a single item but this is confusing for anyone who maintains or reuses this code. I guess I just answered my own question; This is a very bad practice.
use strict;
use warnings;
my @array1 = ( "this is a line\n", "this is a second line");
my @array2 = qw( one two three);
sub1 ( @array1 );
sub sub1 {
send_status_email('xxx@yy.com', 'subject',@_, \@array2);
}
sub send_status_email {
my ($to_address, $status, $message, $ar_attachments ) = @_;
print "To: $to_address\n";
print "Status: $status\n";
print "Message <$message>\n";
foreach ( @$ar_attachments ) {
print "ar: $_\n";
}
print "***************** sub finished\n";
}
__END__
** output **
To: xxx@yy.com
Status: subject
Message <this is a line
>
Can't use string ("this is a second line") as an ARRAY ref while "stri
+ct refs" in use at C:\usr\dms\perl\test_sub_array.pl line 20.
|