X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fbase%2Flex.t;h=a5d87f63742c3e84bd8cf0d156dacdec53619797;hb=17c59fdf7540adaf656e96fe6d48b58dab391dc0;hp=0c94b875a3d3dbe3aa8f0d0be7dcc3091e4ad45c;hpb=fe14fcc35f78a371a174a1d14256c2f35ae4262b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/base/lex.t b/t/base/lex.t index 0c94b87..a5d87f6 100644 --- a/t/base/lex.t +++ b/t/base/lex.t @@ -1,16 +1,13 @@ #!./perl -# $Header: lex.t,v 4.0 91/03/20 01:49:08 lwall Locked $ +print "1..57\n"; -print "1..18\n"; +$x = 'x'; -$ # this is the register -= 'x'; +print "#1 :$x: eq :x:\n"; +if ($x eq 'x') {print "ok 1\n";} else {print "not ok 1\n";} -print "#1 :$ : eq :x:\n"; -if ($ eq 'x') {print "ok 1\n";} else {print "not ok 1\n";} - -$x = $#; # this is the register $# +$x = $#[0]; if ($x eq '') {print "ok 2\n";} else {print "not ok 2\n";} @@ -29,7 +26,7 @@ eval 'while (0) { '; eval '$foo{1} / 1;'; -if (!$@) {print "ok 6\n";} else {print "not ok 6\n";} +if (!$@) {print "ok 6\n";} else {print "not ok 6 $@\n";} eval '$foo = 123+123.4+123e4+123.4E5+123.4e+5+.12;'; @@ -56,8 +53,8 @@ $foo EOF EOE -print <<`EOS` . <<\EOF; -echo ok 12 +print <<'EOS' . <<\EOF; +ok 12 - make sure single quotes are honored \nnot ok EOS ok 13 EOF @@ -66,13 +63,213 @@ print qq/ok 14\n/; print qq(ok 15\n); print qq -ok 16\n +[ok 16\n] ; print q; -print <<; # Yow! -ok 18 +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++; -# previous line intentionally left blank. +# Is "[~" scanned correctly? +@a = (1,2,3); +print "not " unless($a[~~2] == 3); +print "ok 57\n";