sub Foo::bar { return 42; } say '1: ', Foo::bar; { no warnings 'redefine'; local *Foo::bar = sub { die }; eval { say '2: ', Foo::bar; }; } say '3: ', Foo::bar; __END__ 1: 42 3: 42