in reply to $! vs the @_ passed to your SIG(DIEWARN) handler

A warn or die handler is passed the argument to either warn or die. So if you have:
$SIG{__DIE__} = sub { print "Died with message '$_[0]'\n"; }; open(NOFILE, '/no/file/here') or die "Ooops: $!";
then you will get:
Died with message 'Ooops: No such file or directory at /home/stephen/t line 2. '

Make sure you don't forget the double underscores before and after WARN and DIE, or you won't catch anything at all.

See perlman:perlvar for more information on %SIG. See perlfunc:warn and perlfunc:die for trapping warn and die.