#!/usr/bin/perl -w use strict; use Test::More 'no_plan'; sub mytest { return $_[0]; } is(mytest(q{foo}),q{foo},"Mytest returns input"); my $return = eval { mytest(undef); }; ok(!defined($return), "mytest returns undef without autodie"); is($@,"","Mytest doesn't throw an exception without autodie"); $return = eval { use autodie qw(mytest); mytest('foo'); }; is($return,'foo',"Mytest returns input with autodie"); is($@,"","No error should be thrown"); $return = eval { use autodie qw(mytest); mytest(undef); }; isa_ok($@,'autodie::exception',"autodie mytest/undef throws exception"); # We set initial values here because we're expecting $data to be # changed to undef later on. Having it as undef to begin with means # we can't see mytest(undef) working correctly. my ($data, $data2) = (1,1); eval { use autodie qw(mytest); { no autodie qw(mytest); $data = mytest(undef); $data2 = mytest('foo'); } }; is($@,"","no autodie can counter use autodie for user subs"); ok(!defined($data), "mytest(undef) should return undef"); is($data2, "foo", "mytest(foo) should return foo"); eval { mytest(undef); }; is($@,"","No lingering failure effects"); $return = eval { mytest("bar"); }; is($return,"bar","No lingering return effects");