#!./perl BEGIN { chdir 't' if -d 't'; @INC = '../lib'; require './test.pl'; } $| = 1; umask 0; $xref = \ ""; $runme = $^X; @a = (1..5); %h = (1..6); $aref = \@a; $href = \%h; open OP, qq{$runme -le "print 'aaa Ok ok' for 1..100"|}; $chopit = 'aaaaaa'; @chopar = (113 .. 119); $posstr = '123456'; $cstr = 'aBcD.eF'; pos $posstr = 3; $nn = $n = 2; sub subb {"in s"} @INPUT = ; @simple_input = grep /^\s*\w+\s*\$\w+\s*[#\n]/, @INPUT; sub wrn {"@_"} # Check correct optimization of ucfirst etc my $a = "AB"; my $b = "\u\L$a"; is( $b, 'Ab', 'Check correct optimization of ucfirst, etc'); # Check correct destruction of objects: my $dc = 0; sub A::DESTROY {$dc += 1} $a=8; my $b; { my $c = 6; $b = bless \$c, "A"} is($dc, 0, 'No destruction yet'); $b = $a+5; is($dc, 1, 'object descruction via reassignment to variable'); my $xxx = 'b'; $xxx = 'c' . ($xxx || 'e'); is( $xxx, 'cb', 'variables can be read before being overwritten'); { # Check calling STORE note('Tied variables, calling STORE'); my $sc = 0; sub B::TIESCALAR {bless [11], 'B'} sub B::FETCH { -(shift->[0]) } sub B::STORE { $sc++; my $o = shift; $o->[0] = 17 + shift } my $m; tie $m, 'B'; $m = 100; is( $sc, 1, 'STORE called when assigning scalar to tied variable' ); my $t = 11; $m = $t + 89; is( $sc, 2, 'and again' ); is( $m, -117, 'checking the tied variable result' ); $m += $t; is( $sc, 3, 'called on self-increment' ); is( $m, 89, 'checking the tied variable result' ); } # Chains of assignments my ($l1, $l2, $l3, $l4); my $zzzz = 12; $zzz1 = $l1 = $l2 = $zzz2 = $l3 = $l4 = 1 + $zzzz; is($zzz1, 13, 'chain assignment, part1'); is($zzz2, 13, 'chain assignment, part2'); is($l1, 13, 'chain assignment, part3'); is($l2, 13, 'chain assignment, part4'); is($l3, 13, 'chain assignment, part5'); is($l4, 13, 'chain assignment, part6'); for (@INPUT) { ($op, undef, $comment) = /^([^\#]+)(\#\s+(.*))?/; $comment = $op unless defined $comment; chomp; $op = "$op==$op" unless $op =~ /==/; ($op, $expectop) = $op =~ /(.*)==(.*)/; $skip = ($op =~ /^'\?\?\?'/ or $comment =~ /skip\(.*\Q$^O\E.*\)/i) ? "skip" : "# '$_'\nnot"; $integer = ($comment =~ /^i_/) ? "use integer" : '' ; if ($skip eq 'skip') { SKIP: { skip $comment, 1; pass(); } next; } eval < # glob # readline 'faked' # rcatline (@z = (1 .. 3)) # aassign chop $chopit # chop (chop (@x=@chopar)) # schop chomp $chopit # chomp (chop (@x=@chopar)) # schomp pos $posstr # pos pos $chopit # pos returns undef $nn++==2 # postinc $nn++==3 # i_postinc $nn--==4 # postdec $nn--==3 # i_postdec $n ** $n # pow $n * $n # multiply $n * $n # i_multiply $n / $n # divide $n / $n # i_divide $n % $n # modulo $n % $n # i_modulo $n x $n # repeat $n + $n # add $n + $n # i_add $n - $n # subtract $n - $n # i_subtract $n . $n # concat $n . $a=='2fake' # concat with self "3$a"=='3fake' # concat with self in stringify "$n" # stringify $n << $n # left_shift $n >> $n # right_shift $n <=> $n # ncmp $n <=> $n # i_ncmp $n cmp $n # scmp $n & $n # bit_and $n ^ $n # bit_xor $n | $n # bit_or -$n # negate -$n # i_negate ~$n # complement atan2 $n,$n # atan2 sin $n # sin cos $n # cos '???' # rand exp $n # exp log $n # log sqrt $n # sqrt int $n # int hex $n # hex oct $n # oct abs $n # abs length $posstr # length substr $posstr, 2, 2 # substr vec("abc",2,8) # vec index $posstr, 2 # index rindex $posstr, 2 # rindex sprintf "%i%i", $n, $n # sprintf ord $n # ord chr $n # chr crypt $n, $n # crypt ucfirst ($cstr . "a") # ucfirst padtmp ucfirst $cstr # ucfirst lcfirst $cstr # lcfirst uc $cstr # uc lc $cstr # lc quotemeta $cstr # quotemeta @$aref # rv2av @$undefed # rv2av undef (each %h) % 2 == 1 # each values %h # values keys %h # keys %$href # rv2hv pack "C2", $n,$n # pack split /a/, "abad" # split join "a"; @a # join push @a,3==6 # push unshift @aaa # unshift reverse @a # reverse reverse $cstr # reverse - scal grep $_, 1,0,2,0,3 # grepwhile map "x$_", 1,0,2,0,3 # mapwhile subb() # entersub caller # caller warn "ignore this\n" # warn 'faked' # die open BLAH, "