#!./perl BEGIN { chdir 't' if -d 't'; @INC = '../lib'; require './test.pl'; } use strict; use warnings; plan tests => 14; { package J; my $c = 0; sub reset { $c = 0 } sub TIESCALAR { bless [] } sub FETCH { $c++ ? "next" : "first" } } # This test makes sure that we can't pull a fast one on study(). If we # study() a tied variable, perl should know that the studying isn't # valid on subsequent references, and should account for it. for my $do_study (0,1) { J::reset(); my $x; tie $x, "J"; if ($do_study) { study $x; pass( "Studying..." ); } else { my $first_fetch = $x; pass( "Not studying..." ); } # When it was studied (or first_fetched), $x was "first", but is now "next", so # should not match /f/. ok( $x !~ /f/, qq{"next" doesn't match /f/} ); is( index( $x, 'f' ), -1, qq{"next" doesn't contain "f"} ); # Subsequent references to $x are "next", so should match /n/ ok( $x =~ /n/, qq{"next" matches /n/} ); is( index( $x, 'n' ), 0, qq{"next" contains "n" at pos 0} ); # The letter "t" is in both, but in different positions ok( $x =~ /t/, qq{"next" matches /t/} ); is( index( $x, 't' ), 3, qq{"next" contains "t" at pos 3} ); }