⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lex_assign.t

📁 UNIX下perl实现代码
💻 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 + -