sub func { # Any changes to $_ will affect the caller's var. local *_ = \$_[0]; ... } #### sub func { my ($s) = $_[0]; # Safe. local *_ = \$s; ... } #### sub func { # Any changes to $_ will affect the caller's var. for ($_[0]) { ... } } #### sub func { for (my $s = $_[0]) { # Safe. ... } }