版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、UNIX操作系统北京邮电大学电信工程学院多媒体中心第1页,共80页。第七章 Perl编程语言概述数据类型标量列表数组关联数组内部变量流控基本I/O文件操作格式函数8/20/20222BUPT MultiMedia Hop Lee第2页,共80页。Perl 的全称是:Practical Extraction and Report Language即“实用摘录和报告语言”。其开发者和唯一的维护者是Larry Wall。Perl的设计目标是帮助Unix用户完成一些常见的任务,而这些任务对于Shell来说过于复杂。Perl语言中包含了C,C+,shell,script, sed,awk 这几个语言的语
2、法,它最初的目的就是用来取代UNIX中sed/awk与 脚本语言的组合,用来汇整信息,产生报表。因此 Perl语言要远远比前面讲的Bash复杂和功能强大。8/20/20223BUPT MultiMedia Hop Lee第3页,共80页。Perl简洁的结构允许你开发一些非常漂亮的、一步到位的方案或通用的工具。由于Perl的高度可移植性,你也可以将这些工具用于其他的任务。Perl是免费的,并且各种常见的操作系统上都存在相应版本的发行。8/20/20224BUPT MultiMedia Hop Lee第4页,共80页。一、概述Perl脚本的第一行必须是:#!/usr/bin/perlPerl的注释
3、和Shell一样,以#开始Perl更象一个编译器和解释器的组合。Perl程序在运行之前将进行扫描和分析,但是又不产生庞大的目标代码。未来的版本将能够缓存已编译的代码。Perl的所有简单语句均以分号结束。8/20/20225BUPT MultiMedia Hop Lee第5页,共80页。Perl的数据类型主要有三种:标量数据、数组(列表)和关联数组。8/20/20226BUPT MultiMedia Hop Lee第6页,共80页。二、标量数据所谓标量就是非矢量、非数组的数据。Perl中的标量变量以美元符号$和一个字母开始,后面可以跟字母、数字和下划线,Perl的变量区分大小写,因此$a和$A是
4、代表不同的变量。和Bash中不同的是Perl语言中的变量即使是在最初赋值的时候也必须在变量前面加上$符号,而且Perl不要求=左右必须没有空格。8/20/20227BUPT MultiMedia Hop Lee第7页,共80页。Perl所处理的标量数据包括数字和字符串两大类。Perl的数值型数据只有一种类型:浮点数,所有的整数都将当作等效的浮点数来处理。浮点型常量的表示方式和C语言里一样。8/20/20228BUPT MultiMedia Hop Lee第8页,共80页。Perl的字符串类型数据的取值可以是整个ASCII表,并且其长度遵循“无内置限制”的原则从0直到填满内存。字符串常量有两种形
5、式:单引号字符串和双引号字符串。单引号字符串:单引号用于表示字符串的边界,其中可以包含任意字符并且取消所有元字符的特殊含义(唯一的例外是前后相连的或);8/20/20229BUPT MultiMedia Hop Lee第9页,共80页。双引号字符串:类似于C语言里的字符串,其中的反斜线用于表示特定的控制字符的开始;并且其中的变量将被置换。运算符算数运算符+, -, *, /, *, %逻辑运算符, =, , 8/20/202210BUPT MultiMedia Hop Lee第10页,共80页。字符串运算符.串接运算符x复制运算符eq, ne, lt, gt, le, ge, cmp字符串逻辑
6、运算符数值和字符串之间的转换如果某个字符串的值被用于数值运算符的运算域,在Perl将自动将其转换为一个十进制浮点数,并且去掉开头的和末尾的非数字元素。同样的转换发生在某个数值作为字符串使用时。8/20/202211BUPT MultiMedia Hop Lee第11页,共80页。赋值运算符:=, +=, -=, *=, /=, %=, *=, .=, x=, +(左、右), - (左、右)特殊运算符:$w?$x:$y如果$w为真,则返回$x;如果$w为假,则返回$y 。($x.$y) 返回从$x到$y之间的值。chop($x)将$x的字符串值的最后一个字符去掉8/20/202212BUPT M
7、ultiMedia Hop Lee第12页,共80页。例:#!/usr/bin/perl$folks=100;print $folks = $folks n;print $folks = $folks n;print nn BEEP! a LSOME BLANK ELINES HERE nn;$date = date +%D;print Today is $date n;chop $date;print Date after chopping off carriage return: .$date.n;8/20/202213BUPT MultiMedia Hop Lee第13页,共80页。注意
8、实际程序中不应该包括行号。其输出结果如下:$folks = 100$folks = $folks nBEEP! some blank LINES HEREToday is 03/29/96Date after chopping off carriage return: 03/29/96第3行显示$folks的值。$之前必须使用换码符,以便Perl显示字符串$folks而不是$folks的值100。第4行使用的是单引号,结果Perl不解释其中的任何内容,只是原封不动地将字符串显示出来。第6行使用的是(),则date +%D命令的执行结果存储在标量$date 中。8/20/202214BUPT M
9、ultiMedia Hop Lee第14页,共80页。上例中使用了一些有特殊意义的字符,下面列出这些字符的含义:n换行。r回车。t制表符。a蜂鸣声。b Backspace。LE将L和E之间的字符转换成小写。8/20/202215BUPT MultiMedia Hop Lee第15页,共80页。l将其后的字符转换成小写。U E将U和E之间的字符转换成大写。u将其后的字符转换成大写。cC插入控制字符C。x#十六进制数#。0ooo八进制数ooo。 反斜杠。 按原样输出下一个字符,例如:$输出$。8/20/202216BUPT MultiMedia Hop Lee第16页,共80页。简单变量是标量,是
10、Perl处理的最简单的数据类型。标量可以是数字(如2,3或2.5e6), 也可以是字符串。8/20/202217BUPT MultiMedia Hop Lee第17页,共80页。另外在Perl语言里,我们常会看到my这样的变量定义,如:my $a = local var;#表示$a是一个程序块的局部变量。8/20/202218BUPT MultiMedia Hop Lee第18页,共80页。三、数组(列表)数组(array)是标量数据的有序列表。每个数组元素都是具有标量值的单独的标量变量。数组可以有任意多个元素。数组变量以开头。数组的下标从0开始,你可以使用方括号引用数组的下标。8/20/20
11、2219BUPT MultiMedia Hop Lee第19页,共80页。数组常量是位于括号内用逗号分开的一系列值,这些值可以是标量常量或是表达式。数组的元素可以包含“.”运算符,这个运算符以1为增量创建一个从左边标量值开始到右边标量值结束的数值列表。如果右边的标量小于左边的标量则产生空表。如果前后两个值的差值不是整数,则表尾的元素是不超出范围的最后一个值。8/20/202220BUPT MultiMedia Hop Lee第20页,共80页。数组运算符赋值:=fred=(1,2,3);barney=fred;huh=1;fred=(“one”,”two”);barney=(4,5,fred,
12、6,7);barney=(8,barney);barney=(barney,”last”);8/20/202221BUPT MultiMedia Hop Lee第21页,共80页。($a,$b,$c)=(1,2,3);($a,$b)=($b,$a);($d,fred)=($a,$b,$c);($e,fred)=fred;#after that, fred=($c), $e=$b#注意:(fred,$e)=fred;将导致$e为undef如果赋值号两边的表中元素数目不等,则等号右边任何多出来的值都被截去;等号左边多出来的变量都被赋为undef。8/20/202222BUPT MultiMedia
13、 Hop Lee第22页,共80页。如果把数组变量赋给标量,则标量变量的值就是数组的长度。赋值表达式的值为数组变量得到的值:fred=($barney=(2,3,4);fred=barney=(2,3,4);上述两式结果相同。8/20/202223BUPT MultiMedia Hop Lee第23页,共80页。数组元素的引用数组元素的下标都是从0开始,增量为1。下标运算符为。($fred0,$fred1)=($fred1,$fred0);片段(slice):对同一个数组的一部分元素的访问可以使用slice表达式:fred0,1=fred1,0;#对调8/20/202224BUPT Multi
14、Media Hop Lee第24页,共80页。fred0,1,2=fred1,1,1;#将前三个元素都变成第二个元素的值。who=(“fred”,”barney”,”betty”)1,2; #等效于who=(”barney”,”betty”);fred=(7,8,9);barney=(2,1,0);backfred=fredbarney;#(9,8,7)fred=(1,2,3);$fred3=“hi”;$fred6=“ho”;#(1,2,3,”hi”,undef,undef,”ho”)8/20/202225BUPT MultiMedia Hop Lee第25页,共80页。可以使用$#fred来
15、得到数组fred的末尾元素的索引值;并通过对他赋值来改变数组fred的长度。push()和pop()运算符:push(myarr, $newvalue);$oldvalue=pop(myarr);shift()和unshift()运算符类似与push()和pop(),只不过他们是对数组左边的元素操作。8/20/202226BUPT MultiMedia Hop Lee第26页,共80页。reverse()运算符返回数组元素反序后的结果,但是不改变参数。sort()运算符将所有参数都当成是ASCII字符串,按升序方式排序,返回排序后的结果但是不改变原列表。chop()运算符可以删去数组中每个元素
16、的最后一个字符。8/20/202227BUPT MultiMedia Hop Lee第27页,共80页。四、关联数组关联数组也是由一系列标量数据组成的集合,它与列表数组的区别是它的索引值不再是非负的整数而是任意的标量,这些表示索引的标量称为关键字(key)。实际上关联数组是数据结构里的散列表。关联数组的元素没有特定的顺序。8/20/202228BUPT MultiMedia Hop Lee第28页,共80页。关联数组常量:关联数组常量由含有偶数个元素的列表数组表示:%fred=(“aaa,”bbb”,”234.5”,456.7) 将生成一个含有两个键值对的关联数组。在展开表中的键值对的顺序可以
17、是任意的,其在内存中的具体顺序是由Perl建立的,用于提高访问单个元素的效率。8/20/202229BUPT MultiMedia Hop Lee第29页,共80页。关联数组变量名以%号开头。在创建和访问关联数组时只需使用对数组元素的引用即可:关联数组%arr的每个元素都可被$arr$key引用。关联数组操作符keys()操作符keys(%arr)将生成由关联数组%arr中的所有关键字组成的列表数组。8/20/202230BUPT MultiMedia Hop Lee第30页,共80页。其中的圆括号是可选的例:foreach $key(keys %fred) print “at $key we
18、 get $fred$keyn”;在标量环境中,keys()返回关联数组中键值对的个数。values()操作符values(%arr)返回由%arr中的值构成的列表数组。圆括号是可选的。8/20/202231BUPT MultiMedia Hop Lee第31页,共80页。each()操作符each(%arr)返回%arr中的一个键值对列表,对同一关联数组再次使用此操作符将返回下一个键值对,当处理到数组的最后一个元素之后,将返回一个空表。例:while($first,$last)=each(%arr)print “The last name of $first is $lastn”;给整个数组
19、赋新值将使each()操作符重置到数组的起始位置。8/20/202232BUPT MultiMedia Hop Lee第32页,共80页。delete()操作符delete的操作数是关联数组的引用。用于删除指定的键值对。8/20/202233BUPT MultiMedia Hop Lee第33页,共80页。五、内部变量$_缺省的输入和模式搜索空间$n标记寄存器,用于存储由前面的标记正则表达式匹配的内容。只读。$&最近一个成功匹配的字符串。只读。$最近一个成功匹配的字符串之前的字符串。只读。$最近一个成功匹配的字符串之后的字符串。只读。$.当前记录序号。当文件句柄被显式关闭时此参数将被重置为0。
20、$/输入记录分隔符。缺省为NewLine。8/20/202234BUPT MultiMedia Hop Lee第34页,共80页。$|如果将其值置为非0,则每当你向当前的输出通道写或打印时就将强制flush一下。缺省为0。$,输出字段分隔符。缺省为空。$输出记录分隔符。缺省为空。$”类似于$,,不过应用于数组元素的输出。缺省为空格。$;模拟多维数组的下标分隔符。缺省为034。8/20/202235BUPT MultiMedia Hop Lee第35页,共80页。$#缺省的数字输出格式。初始值为%.ng,其中n为系统中float.h文件中宏DBL_DIG的值。$%当前输出通道里的当前页号。$=当
21、前输出通道中每页能包含的行数,缺省为60。$-当前输出页中剩余的行数。$当前输出报告的格式名称。8/20/202236BUPT MultiMedia Hop Lee第36页,共80页。$当前页眉的格式名称。$:当前断字符。缺省为“n-”。$L输出换页符。缺省为f。$正在运行当前Perl脚本的进程ID号。$上述进程的有效uid。$(上述进程的真实gid。$)上述进程的有效gid。8/20/202237BUPT MultiMedia Hop Lee第37页,共80页。$0当前Perl脚本文件名。$列表数组的第一个元素的下标,或者是字符串的第一个字符的下标,缺省为0。$O当前OS名。$T当前Perl
22、脚本开始运行的时间,表示为epoch之后的秒数。$X类似于C中的argv0。$ARGV当从中读取数据时,表示当前数据文件名。8/20/202238BUPT MultiMedia Hop Lee第38页,共80页。ARGV参数列表。_函数的实参列表。局部变量。%ENV环境变量数组。%SIG信号数组,key表示信号类型,value表示要进行的处理8/20/202239BUPT MultiMedia Hop Lee第39页,共80页。例1:$_ = abcdefghi;/def/;print $:$&:$;#prints abc:def:ghi例2:sub handler # 1st argumen
23、t is signal namemy($sig) = _; print Caught a SIG$sig-shutting downn; close(LOG); exit(0);8/20/202240BUPT MultiMedia Hop Lee第40页,共80页。$SIGINT = &handler;$SIGQUIT = &handler;.$SIGINT = DEFAULT; # restore default action$SIGQUIT = IGNORE; # ignore SIGQUIT8/20/202241BUPT MultiMedia Hop Lee第41页,共80页。六、流控语
24、句块:位于一对花括号之间的语句序列。statement;statement;statement;8/20/202242BUPT MultiMedia Hop Lee第42页,共80页。if语句:if(expression 1) statements block 1 elsif(expression 2) statements block 2 elsestatements block nunless语句:unless=if not8/20/202243BUPT MultiMedia Hop Lee第43页,共80页。控制表达式expression是作为字符串计算的,如果是空串或只包括单个字符“0
25、”,则表达式为假,否则为真。例:0# false1-1# false1# true“”# false“1”# true“00”# true“0.000”# trueundef# false8/20/202244BUPT MultiMedia Hop Lee第44页,共80页。while语句:while(expressions) statements blockuntil语句:until(expressions) statement block8/20/202245BUPT MultiMedia Hop Lee第45页,共80页。for语句:for(expr1; expr2; expr3)sta
26、tement blockforeach语句:foreach $var (arr_expr) statement block8/20/202246BUPT MultiMedia Hop Lee第46页,共80页。arr_expr可以是任意表达式。如果arr_expr是单个数组变量的引用,那么在循环体中对$var的修改将直接作用于相应的数组元素。即这时是byref引用。例:a=(3,5,7,9)foreach $one (a) $one *= 3;# now a is (9,15,21,27)8/20/202247BUPT MultiMedia Hop Lee第47页,共80页。last终止最近的
27、封闭循环块例:while(expr) statement blocklast;# last to here8/20/202248BUPT MultiMedia Hop Lee第48页,共80页。next跳过最近的封闭循环块中的剩余部分,进行下一次循环例:while(expr) statement block 1next;statement block 2# next to here8/20/202249BUPT MultiMedia Hop Lee第49页,共80页。redo跳到当前循环块的最开始位置例:while(expr) # redo to herestatement blockredo
28、;8/20/202250BUPT MultiMedia Hop Lee第50页,共80页。label block使用label给语句块起一个名字,用于last和next语句使用标号只能跳出,不能跳入8/20/202251BUPT MultiMedia Hop Lee第51页,共80页。表达式简写方式1(倒置)exp2 if exp1;exp2 unless exp1;exp2 while exp1;exp2 until exp1;先对exp1求值,并据此判断是否执行exp28/20/202252BUPT MultiMedia Hop Lee第52页,共80页。表达式简写方式2(&,|,?:)e
29、xp1 & exp2;#if(exp1)exp2;exp1 | exp2;#unless(exp1)exp2;exp1 ? exp2 : exp3; if(exp1) exp2; else exp3;8/20/202253BUPT MultiMedia Hop Lee第53页,共80页。七、基本I/OSTDIN使用操作符表示从标准输入读取数据,直到遇到$/为止。和类似,但是可以从Perl的命令行参数文件名指定的输入文件中读取记录。8/20/202254BUPT MultiMedia Hop Lee第54页,共80页。STDOUTprint()操作符,返回成功(1)或失败(0)printf(fm
30、t_str, value_list),类似于C和awk中的格式。8/20/202255BUPT MultiMedia Hop Lee第55页,共80页。八、文件操作文件句柄已经见过的有STDIN,STDOUT,STDERR文件句柄的打开和关闭open(FILEHANDLE,”file_name”);表示以读写覆盖方式打开文件。close(FILEHANDLE);关闭文件句柄。8/20/202256BUPT MultiMedia Hop Lee第56页,共80页。die()操作符在可选的圆括号里带有一列表,以标准错误的方式输出该列表,然后以非零的UNIX退出状态结束该Perl进程。如果die()
31、的列表的最后没有一个n,则退出时的信息中自动带有Perl程序的名字及行数。8/20/202257BUPT MultiMedia Hop Lee第57页,共80页。例:open(IN,$a)|die “Cannot open $a for reading.”;open(OUT,”$b”)|die “Cannot create $b.”;while()print OUT $_;close(OUT);close(IN);8/20/202258BUPT MultiMedia Hop Lee第58页,共80页。文件测试:-rReadable for euid-wWritablefor euid-xExe
32、cutable for euid-oOwner by euid-RReadable for ruid-WWritable for ruid-XExecutable for ruid-OOwner by ruid8/20/202259BUPT MultiMedia Hop Lee第59页,共80页。-eExist-zExist and size=zero-sExist and size!=zero-fPure file-dDirectory-lLink file-SSocket-pNamed pipe8/20/202260BUPT MultiMedia Hop Lee第60页,共80页。-bBl
33、ock device file-cCharacter device file-uNuid is N-gNgid is N-kHas sticky bit-tisatty() is true-TText file-BBinary file8/20/202261BUPT MultiMedia Hop Lee第61页,共80页。-MUp to todays time in days from LMT, precession in second-Afrom LAT-Cfrom inode changed timestat()和lstat()操作符Stat()的操作数是一个文件句柄,返回值是有13个元素
34、的数组:8/20/202262BUPT MultiMedia Hop Lee第62页,共80页。($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat();$devdevice$inoinode$modeaccess mode$nlinknumber of hard links$uiduser id of owner8/20/202263BUPT MultiMedia Hop Lee第63页,共80页。$gidgroup id of owner
35、$rdevdevice type (if inode device)$sizetotal size, in bytes$atimelast access time$mtimelast modification time$ctimelast change time$blksizeblock size for file system I/O$blocksnumber of blocks allocated8/20/202264BUPT MultiMedia Hop Lee第64页,共80页。例:studentApple Perl$ ./stat.pl 0 dev 773 1 ino 95268 2
36、 mode 33277 3 nlink 1 4 uid 500 5 gid 500 6 rdev 0 7 size 14350 8 atime 1038893994 9 mtime 1038893994 10 ctime 1038893994 11 blksize 4096 12 blocks 328/20/202265BUPT MultiMedia Hop Lee第65页,共80页。studentApple Perl$ ls -l code-rwxrwxr-x 1 student student 14350 12 3 13:39 codestudentApple Perl$ more sta
37、t.pl #!/usr/bin/perlarr1=(dev, ino, mode, nlink, uid, gid, rdev, size, atime, mtime, ctime, blksize, blocks);arr=stat(/home/student/Examples/Perl/code);for($i = 0; $i code8/20/202267BUPT MultiMedia Hop Lee第67页,共80页。studentApple$ ./stat.pl 0 dev 773 1 ino 95268 2 mode 33277 3 nlink 1 4 uid 500 5 gid
38、500 6 rdev 0 7 size 14350 8 atime 1038893994 9 mtime 1038893994 10 ctime 1038894348 11 blksize 4096 12 blocks 32studentApple$ ./lstat.pl 0 dev 773 1 ino 95269 2 mode 41471 3 nlink 1 4 uid 500 5 gid 500 6 rdev 0 7 size 4 8 atime 1038894488 9 mtime 1038894357 10 ctime 1038894357 11 blksize 4096 12 blo
39、cks 08/20/202268BUPT MultiMedia Hop Lee第68页,共80页。每次进行文件测试操作时,Perl都将向系统申请一个该文件的stat缓冲区。在指定的_文件句柄上进行文件操作就可以让Perl直接使用前一次文件测试的缓冲区。例:if(-r $filevar & -w_) print “$filevar is both readable and writable.n”;8/20/202269BUPT MultiMedia Hop Lee第69页,共80页。九、格式Perl提供了简单的报告书写模板的概念,叫做格式(format)。Format定义了常量部分(每列的开头、
40、标签、相应的正文或其它)以及变量部分(报告中的数据)。使用格式需要做三件事:定义格式提取数据,将其打印到格式的变量部分申请格式8/20/202270BUPT MultiMedia Hop Lee第70页,共80页。定义格式格式定义可以出现在程序中的任何位置:format fmt_name = FORMLIST.8/20/202271BUPT MultiMedia Hop Lee第71页,共80页。第一行包括保留字format,以及该格式的名称(缺省为STDOUT)和一个等号。下面是“模板”本身,可以有任意行文本。每一行文本都应该是下述三种之一:第一列以#开头的注释格式字符串给出每个输出行的格式
41、用于匹配格式字符串的参数列表8/20/202272BUPT MultiMedia Hop Lee第72页,共80页。格式字符串中的普通文本原样输出。以开头的是字段格式,在字段格式中的字符,|分别表示左、右和中央对齐。字符的个数表明了相应参数的输出值的宽度,如果值的宽度过大,将被截断,过小则填充空格。8/20/202273BUPT MultiMedia Hop Lee第73页,共80页。例:studentApple Perl$ more passwd_report.pl#!/usr/bin/perl# a report on the /etc/passwd fileformat PWDLIST_TOP = Passwd File Page $%No. Name Login Office Uid Gid Home.format PWDLIST = passwd_report) | die Cant create output file.;open(PWDFILE, /etc/passwd) | die Cant open data file.;# Change the pa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 30000ta絮凝剂、15200ta融雪剂、5000ta水泥助磨剂项目可行性研究报告模板-立项申报用
- 如何制定岗位责任制度
- 如何规范管理企业会计制度
- 婚检消毒卫生制度
- 2026年内部审计师考试试卷及答案
- 福州市辅警招聘笔试题及答案
- 儋州市护士招聘面试题及答案
- 2026年全国导游资格考试试卷及答案(四)
- 心理健康疾病音乐疗法
- 骨髓炎症状辨析及护理技巧探讨
- 2026年宝鸡市辛家山林业局、宝鸡市马头滩林业局招聘(12人)考试参考题库及答案解析
- 2026年非遗保护中心招聘考试面试题及参考答案
- 6.3 社会主义市场经济体制(教学设计) 2025-2026学年统编版道德与法治八年级下册
- 2026年及未来5年市场数据中国电化学工作站行业发展监测及投资战略咨询报告
- 江苏省南京市2025届中考化学试卷(含答案)
- DB35-T 2262-2025 海峡两岸共通 美人茶加工技术规程
- 局麻的并发症及其防治
- 山东省济南市历城区2025-2026学年七年级下学期期中考试英语试卷
- 【物化生 山东卷】2025年山东省高考招生统一考试高考真题物理+化学+生物试卷(真题+答案)
- T/ZHCA 019-2022化妆品去屑功效测试方法
- T/CPMA 016-2020数字化预防接种门诊基本功能标准
评论
0/150
提交评论