1#!./perl 2 3# Test || in weird situations. 4 5BEGIN { 6 chdir 't' if -d 't'; 7 @INC = '../lib'; 8} 9 10 11package Countdown; 12 13sub TIESCALAR { 14 my $class = shift; 15 my $instance = shift || undef; 16 return bless \$instance => $class; 17} 18 19sub FETCH { 20 print "# FETCH! ${$_[0]}\n"; 21 return ${$_[0]}--; 22} 23 24 25package main; 26require './test.pl'; 27 28plan( tests => 8 ); 29 30 31my ($a, $b, $c); 32 33$! = 1; 34$a = $!; 35my $a_str = sprintf "%s", $a; 36my $a_num = sprintf "%d", $a; 37 38$c = $a || $b; 39 40is($c, $a_str); 41is($c+0, $a_num); # force numeric context. 42 43$a =~ /./g or die "Match failed for some reason"; # Make $a magic 44 45$c = $a || $b; 46 47is($c, $a_str); 48is($c+0, $a_num); # force numeric context. 49 50my $val = 3; 51 52$c = $val || $b; 53is($c, 3); 54 55tie $a, 'Countdown', $val; 56 57$c = $a; 58is($c, 3, 'Single FETCH on tied scalar'); 59 60$c = $a; 61is($c, 2, ' $tied = $var'); 62 63$c = $a || $b; 64 65{ 66 local $TODO = 'Double FETCH'; 67 is($c, 1, ' $tied || $var'); 68} 69