#!./perl print "1..81\n"; $x = 'x'; print "#1 :$x: eq :x:\n"; if ($x eq 'x') {print "ok 1\n";} else {print "not ok 1\n";} $x = $#[0]; if ($x eq '') {print "ok 2\n";} else {print "not ok 2\n";} $x = $#x; if ($x eq '-1') {print "ok 3\n";} else {print "not ok 3\n";} $x = '\\'; # '; if (length($x) == 1) {print "ok 4\n";} else {print "not ok 4\n";} eval 'while (0) { print "foo\n"; } /^/ && (print "ok 5\n"); '; eval '$foo{1} / 1;'; if (!$@) {print "ok 6\n";} else {print "not ok 6 $@\n";} eval '$foo = 123+123.4+123e4+123.4E5+123.4e+5+.12;'; $foo = int($foo * 100 + .5); if ($foo eq 2591024652) {print "ok 7\n";} else {print "not ok 7 :$foo:\n";} print <<'EOF'; ok 8 EOF $foo = 'ok 9'; print <; print "ok 18 - was the test for the deprecated use of bare << to mean <<\"\"\n"; #print <<; # Yow! #ok 18 # ## previous line intentionally left blank. print < -1; print "ok 37\n"; # print "($@)\n" if $@; eval 'my $ {^XYZ};'; print "not " unless index ($@, 'Can\'t use global $^XYZ in "my"') > -1; print "ok 38\n"; # print "($@)\n" if $@; # Now let's make sure that caret variables are all forced into the main package. package Someother; $^Q = 'Someother'; $ {^Quixote} = 'Someother 2'; $ {^M} = 'Someother 3'; package main; print "not " unless $^Q eq 'Someother'; print "ok 39\n"; print "not " unless $ {^Quixote} eq 'Someother 2'; print "ok 40\n"; print "not " unless $ {^M} eq 'Someother 3'; print "ok 41\n"; } # see if eval '', s///e, and heredocs mix sub T { my ($where, $num) = @_; my ($p,$f,$l) = caller; print "# $p:$f:$l vs /$where/\nnot " unless "$p:$f:$l" =~ /$where/; print "ok $num\n"; } my $test = 42; { # line 42 "plink" local $_ = "not ok "; eval q{ s/^not /<@nosuch<" eq "><")) || print "# $@", "not "; print "ok $test\n"; ++$test; # Look at this! This is going to be a common error in the future: eval(q("fred@example.com" eq "fred.com")) || print "# $@", "not "; print "ok $test\n"; ++$test; # Let's make sure that normal array interpolation still works right # For some reason, this appears not to be tested anywhere else. my @a = (1,2,3); print +((">@a<" eq ">1 2 3<") ? '' : 'not '), "ok $test\n"; ++$test; # Ditto. eval(q{@nosuch = ('a', 'b', 'c'); ">@nosuch<" eq ">a b c<"}) || print "# $@", "not "; print "ok $test\n"; ++$test; # This isn't actually a lex test, but it's testing the same feature sub makearray { my @array = ('fish', 'dog', 'carrot'); *R::crackers = \@array; } eval(q{makearray(); ">@R::crackers<" eq ">fish dog carrot<"}) || print "# $@", "not "; print "ok $test\n"; ++$test; } # Tests 52-54 # => should only quote foo::bar if it isn't a real sub. AMS, 20010621 sub xyz::foo { "bar" } my %str = ( foo => 1, xyz::foo => 1, xyz::bar => 1, ); my $test = 52; print ((exists $str{foo} ? "" : "not ")."ok $test\n"); ++$test; print ((exists $str{bar} ? "" : "not ")."ok $test\n"); ++$test; print ((exists $str{xyz::bar} ? "" : "not ")."ok $test\n"); ++$test; sub foo::::::bar { print "ok $test\n"; $test++ } foo::::::bar; eval "\$x =\xE2foo"; if ($@ =~ /Unrecognized character \\xE2; marked by <-- HERE after \$x =<-- HERE near column 5/) { print "ok $test\n"; } else { print "not ok $test\n"; } $test++; # Is "[~" scanned correctly? @a = (1,2,3); print "not " unless($a[~~2] == 3); print "ok 57\n"; $_ = ""; eval 's/(?:)/"${\q||}".<<\END/e; ok 58 - heredoc after "" in s/// in eval END '; print $_ || "not ok 58\n"; $_ = ""; eval 's|(?:)|"${\<<\END}" ok 59 - heredoc in "" in multiline s///e in eval END |e '; print $_ || "not ok 59\n"; $_ = ""; eval "s/(?:)/<{3/e"; print "not " unless $@; print "ok 72 - s//3}->{3/e\n"; $_ = "not ok 73"; $x{3} = "not "; eval 's/${\%x}{3}//e'; print "$_ - s//\${\\%x}{3}/e\n"; eval 's/${foo#}//e'; print "not " unless $@; print "ok 74 - s/\${foo#}//e\n"; eval 'warn ({$_ => 1} + 1) if 0'; print "not " if $@; print "ok 75 - listop({$_ => 1} + 1)\n"; print "# $@" if $@; $test = 76; for(qw< require goto last next redo dump >) { eval "sub { $_ foo << 2 }"; print "not " if $@; print "ok ", $test++, " - [perl #105924] $_ WORD << ...\n"; print "# $@" if $@; }