1N/A#!./perl
1N/A
1N/A#
1N/A# Verify which OP= operators warn if their targets are undefined.
1N/A# Based on redef.t, contributed by Graham Barr <Graham.Barr@tiuk.ti.com>
1N/A# -- Robin Barker <rmb@cise.npl.co.uk>
1N/A#
1N/A
1N/ABEGIN {
1N/A chdir 't' if -d 't';
1N/A @INC = '../lib';
1N/A require './test.pl';
1N/A}
1N/A
1N/Ause strict;
1N/Ause warnings;
1N/A
1N/Amy $warn = "";
1N/A$SIG{q(__WARN__)} = sub { print $warn; $warn .= join("",@_) };
1N/A
1N/Asub uninitialized { $warn =~ s/Use of uninitialized value[^\n]+\n//s; }
1N/Asub tiex { tie $_[0], 'main' }
1N/Asub TIESCALAR { my $x; bless \$x }
1N/Asub FETCH { ${$_[0]} }
1N/Asub STORE { ${$_[0]} = $_[1] }
1N/Aour $TODO;
1N/A
1N/Aprint "1..63\n";
1N/A
1N/A# go through all tests once normally and once with tied $x
1N/Afor my $tie ("", ", tied") {
1N/A
1N/A{ my $x; tiex $x if $tie; $x ++; ok ! uninitialized, "postinc$tie"; }
1N/A{ my $x; tiex $x if $tie; $x --; ok ! uninitialized, "postdec$tie"; }
1N/A{ my $x; tiex $x if $tie; ++ $x; ok ! uninitialized, "preinc$tie"; }
1N/A{ my $x; tiex $x if $tie; -- $x; ok ! uninitialized, "predec$tie"; }
1N/A
1N/A{ my $x; tiex $x if $tie; $x **= 1; ok uninitialized, "**=$tie"; }
1N/A
1N/A{ local $TODO = $tie && '[perl #17809] pp_add & pp_subtract';
1N/A { my $x; tiex $x if $tie; $x += 1; ok ! uninitialized, "+=$tie"; }
1N/A { my $x; tiex $x if $tie; $x -= 1; ok ! uninitialized, "-=$tie"; }
1N/A}
1N/A
1N/A{ my $x; tiex $x if $tie; $x .= 1; ok ! uninitialized, ".=$tie"; }
1N/A
1N/A{ my $x; tiex $x if $tie; $x *= 1; ok uninitialized, "*=$tie"; }
1N/A{ my $x; tiex $x if $tie; $x /= 1; ok uninitialized, "/=$tie"; }
1N/A{ my $x; tiex $x if $tie; $x %= 1; ok uninitialized, "\%=$tie"; }
1N/A
1N/A{ my $x; tiex $x if $tie; $x x= 1; ok uninitialized, "x=$tie"; }
1N/A
1N/A{ my $x; tiex $x if $tie; $x &= 1; ok uninitialized, "&=$tie"; }
1N/A
1N/A{ local $TODO = $tie && '[perl #17809] pp_bit_or & pp_bit_xor';
1N/A { my $x; tiex $x if $tie; $x |= 1; ok ! uninitialized, "|=$tie"; }
1N/A { my $x; tiex $x if $tie; $x ^= 1; ok ! uninitialized, "^=$tie"; }
1N/A}
1N/A
1N/A{ my $x; tiex $x if $tie; $x &&= 1; ok ! uninitialized, "&&=$tie"; }
1N/A{ my $x; tiex $x if $tie; $x ||= 1; ok ! uninitialized, "||=$tie"; }
1N/A
1N/A{ my $x; tiex $x if $tie; $x <<= 1; ok uninitialized, "<<=$tie"; }
1N/A{ my $x; tiex $x if $tie; $x >>= 1; ok uninitialized, ">>=$tie"; }
1N/A
1N/A{ my $x; tiex $x if $tie; $x &= "x"; ok uninitialized, "&=$tie, string"; }
1N/A
1N/A{ local $TODO = $tie && '[perl #17809] pp_bit_or & pp_bit_xor';
1N/A { my $x; tiex $x if $tie; $x |= "x"; ok ! uninitialized, "|=$tie, string"; }
1N/A { my $x; tiex $x if $tie; $x ^= "x"; ok ! uninitialized, "^=$tie, string"; }
1N/A}
1N/A
1N/A{ use integer;
1N/A
1N/A{ local $TODO = $tie && '[perl #17809] pp_i_add & pp_i_subtract';
1N/A { my $x; tiex $x if $tie; $x += 1; ok ! uninitialized, "+=$tie, int"; }
1N/A { my $x; tiex $x if $tie; $x -= 1; ok ! uninitialized, "-=$tie, int"; }
1N/A}
1N/A
1N/A{ my $x; tiex $x if $tie; $x *= 1; ok uninitialized, "*=$tie, int"; }
1N/A{ my $x; tiex $x if $tie; $x /= 1; ok uninitialized, "/=$tie, int"; }
1N/A{ my $x; tiex $x if $tie; $x %= 1; ok uninitialized, "\%=$tie, int"; }
1N/A
1N/A{ my $x; tiex $x if $tie; $x ++; ok ! uninitialized, "postinc$tie, int"; }
1N/A{ my $x; tiex $x if $tie; $x --; ok ! uninitialized, "postdec$tie, int"; }
1N/A{ my $x; tiex $x if $tie; ++ $x; ok ! uninitialized, "preinc$tie, int"; }
1N/A{ my $x; tiex $x if $tie; -- $x; ok ! uninitialized, "predec$tie, int"; }
1N/A
1N/A} # end of use integer;
1N/A
1N/A} # end of for $tie
1N/A
1N/Ais $warn, '', "no spurious warnings";