X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fbase%2Flex.t;h=984cdff39bfed4570d6f522eb1d0fcfdc1358929;hb=726514722fdec00cc69b3e5c86392c5c95a01f07;hp=7e0ca70fd7ada327bbb88e6a5355c0cca0612399;hpb=2ba53c5797ec83a657fa7f6809a84f6f770569be;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/base/lex.t b/t/base/lex.t index 7e0ca70..984cdff 100755 --- a/t/base/lex.t +++ b/t/base/lex.t @@ -1,8 +1,6 @@ #!./perl -# $RCSfile: lex.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:04 $ - -print "1..26\n"; +print "1..55\n"; $x = 'x'; @@ -55,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 @@ -103,3 +101,165 @@ print "${foo{$bar}}" eq "BAZ" ? "ok 23\n" : "not ok 23\n"; print "FOO:" =~ /$foo[:]/ ? "ok 24\n" : "not ok 24\n"; print "ABC" =~ /^$ary[$A]$/ ? "ok 25\n" : "not ok 25\n"; print "FOOZ" =~ /^$foo[$A-Z]$/ ? "ok 26\n" : "not ok 26\n"; + +# MJD 19980425 +($X, @X) = qw(a b c d); +print "d" =~ /^$X[-1]$/ ? "ok 27\n" : "not ok 27\n"; +print "a1" !~ /^$X[-1]$/ ? "ok 28\n" : "not ok 28\n"; + +print (((q{{\{\(}} . q{{\)\}}}) eq '{{\(}{\)}}') ? "ok 29\n" : "not ok 29\n"); + + +$foo = "not ok 30\n"; +$foo =~ s/^not /substr(< -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;