use warnings; use strict; use Data::Dump; sub foo { dd @_; local $!; dd @_; } $! = 2; foo($!); $! = 2; foo("$!"); __END__ "No such file or directory" "" "No such file or directory" "No such file or directory"