📄 lex_assign.t
字号:
#!./perlBEGIN { chdir 't' if -d 't'; @INC = '../lib';}umask 0;$xref = \ "";$runme = ($^O eq 'VMS' ? 'MCR ' : '') . $^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 = <DATA>;@simple_input = grep /^\s*\w+\s*\$\w+\s*[#\n]/, @INPUT;print "1..", (10 + @INPUT + @simple_input), "\n";$ord = 0;sub wrn {"@_"}# Check correct optimization of ucfirst etc$ord++;my $a = "AB";my $b = "\u\L$a";print "not " unless $b eq 'Ab';print "ok $ord\n";# Check correct destruction of objects:my $dc = 0;sub A::DESTROY {$dc += 1}$a=8;my $b;{ my $c = 6; $b = bless \$c, "A"}$ord++;print "not " unless $dc == 0;print "ok $ord\n";$b = $a+5;$ord++;print "not " unless $dc == 1;print "ok $ord\n";$ord++;my $xxx = 'b';$xxx = 'c' . ($xxx || 'e');print "not " unless $xxx eq 'cb';print "ok $ord\n";{ # Check 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; $ord++; print "not " unless $sc == 1; print "ok $ord\n"; my $t = 11; $m = $t + 89; $ord++; print "not " unless $sc == 2; print "ok $ord\n"; $ord++; print "# $m\nnot " unless $m == -117; print "ok $ord\n"; $m += $t; $ord++; print "not " unless $sc == 3; print "ok $ord\n"; $ord++; print "# $m\nnot " unless $m == 89; print "ok $ord\n";}# Chains of assignmentsmy ($l1, $l2, $l3, $l4);my $zzzz = 12;$zzz1 = $l1 = $l2 = $zzz2 = $l3 = $l4 = 1 + $zzzz;$ord++;print "# $zzz1 = $l1 = $l2 = $zzz2 = $l3 = $l4 = 13\nnot " unless $zzz1 == 13 and $zzz2 == 13 and $l1 == 13 and $l2 == 13 and $l3 == 13 and $l4 == 13;print "ok $ord\n";for (@INPUT) { $ord++; ($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" : '' ; (print "#skipping $comment:\nok $ord\n"), next if $skip eq 'skip'; eval <<EOE; local \$SIG{__WARN__} = \\&wrn; my \$a = 'fake'; $integer; \$a = $op; \$b = $expectop; if (\$a ne \$b) { print "# \$comment: got `\$a', expected `\$b'\n"; print "\$skip " if \$a ne \$b or \$skip eq 'skip'; } print "ok \$ord\\n";EOE if ($@) { if ($@ =~ /is unimplemented/) { print "# skipping $comment: unimplemented:\nok $ord\n"; } else { warn $@; print "# '$_'\nnot ok $ord\n"; } }}for (@simple_input) { $ord++; ($op, undef, $comment) = /^([^\#]+)(\#\s+(.*))?/; $comment = $op unless defined $comment; chomp; ($operator, $variable) = /^\s*(\w+)\s*\$(\w+)/ or warn "misprocessed '$_'\n"; eval <<EOE; local \$SIG{__WARN__} = \\&wrn; my \$$variable = "Ac# Ca\\nxxx"; \$$variable = $operator \$$variable; \$toself = \$$variable; \$direct = $operator "Ac# Ca\\nxxx"; print "# \\\$$variable = $operator \\\$$variable\\nnot " unless \$toself eq \$direct; print "ok \$ord\\n";EOE if ($@) { if ($@ =~ /is unimplemented/) { print "# skipping $comment: unimplemented:\nok $ord\n"; } elsif ($@ =~ /Can't (modify|take log of 0)/) { print "# skipping $comment: syntax not good for selfassign:\nok $ord\n"; } else { warn $@; print "# '$_'\nnot ok $ord\n"; } }}__END__ref $xref # refref $cstr # ref nonref`$runme -e "print qq[1\\n]"` # backtick skip(MSWin32)`$undefed` # backtick undef skip(MSWin32)<*> # glob<OP> # readline'faked' # rcatline(@z = (1 .. 3)) # aassignchop $chopit # chop(chop (@x=@chopar)) # schopchomp $chopit # chomp(chop (@x=@chopar)) # schomppos $posstr # pospos $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 # complementatan2 $n,$n # atan2sin $n # sincos $n # cos'???' # randexp $n # explog $n # logsqrt $n # sqrtint $n # inthex $n # hexoct $n # octabs $n # abslength $posstr # lengthsubstr $posstr, 2, 2 # substrvec("abc",2,8) # vecindex $posstr, 2 # indexrindex $posstr, 2 # rindexsprintf "%i%i", $n, $n # sprintford $n # ordchr $n # chrcrypt $n, $n # cryptucfirst ($cstr . "a") # ucfirst padtmpucfirst $cstr # ucfirstlcfirst $cstr # lcfirstuc $cstr # uclc $cstr # lcquotemeta $cstr # quotemeta@$aref # rv2av@$undefed # rv2av undef(each %h) % 2 == 1 # eachvalues %h # valueskeys %h # keys%$href # rv2hvpack "C2", $n,$n # packsplit /a/, "abad" # splitjoin "a"; @a # joinpush @a,3==6 # pushunshift @aaa # unshiftreverse @a # reversereverse $cstr # reverse - scalgrep $_, 1,0,2,0,3 # grepwhilemap "x$_", 1,0,2,0,3 # mapwhilesubb() # entersubcaller # callerwarn "ignore this\n" # warn'faked' # dieopen BLAH, "<non-existent" # openfileno STDERR # filenoumask 0 # umaskselect STDOUT # sselectselect "","","",0 # selectgetc OP # getc'???' # read'???' # sysread'???' # syswrite'???' # send'???' # recv'???' # tell'???' # fcntl'???' # ioctl'???' # flock'???' # accept'???' # shutdown'???' # ftsize'???' # ftmtime'???' # ftatime'???' # ftctimechdir 'non-existent' # chdir'???' # chown'???' # chrootunlink 'non-existent' # unlinkchmod 'non-existent' # chmodutime 'non-existent' # utimerename 'non-existent', 'non-existent1' # renamelink 'non-existent', 'non-existent1' # link'???' # symlinkreadlink 'non-existent', 'non-existent1' # readlink'???' # mkdir'???' # rmdir'???' # telldir'???' # fork'???' # wait'???' # waitpidsystem "$runme -e 0" # system skip(VMS)'???' # exec'???' # killgetppid # getppidgetpgrp # getpgrp'???' # setpgrpgetpriority $$, $$ # getpriority'???' # setprioritytime # timelocaltime $^T # localtimegmtime $^T # gmtime'???' # sleep: can randomly fail'???' # alarm'???' # shmget'???' # shmctl'???' # shmread'???' # shmwrite'???' # msgget'???' # msgctl'???' # msgsnd'???' # msgrcv'???' # semget'???' # semctl'???' # semop'???' # getlogin'???' # syscall
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -