use AmpKiller; if ("foo" =~ /bar/) { print $& } #### package AmpKiller; # usage: # eval $some_code_that_may_use_dollerampersand; # die "Sorry, can't do that: $@" if $@ && $@=~/Use of .* disallowed/; use strict; use warnings; use Carp 'croak'; sub TIESCALAR { my $var = $_[1]; bless \$var } sub FETCH { croak "Use of ${$_[0]} disallowed" } sub STORE { croak "Modification of a read-only value attempted" } tie our $amp, __PACKAGE__, '$&'; tie our $backtick, __PACKAGE__, '$`'; tie our $tick, __PACKAGE__, '$\''; $::{"&"} = *amp; $::{"'"} = *tick; $::{"`"} = *backtick; 1;