《Perl编程24学时教程》试题

《Perl编程24学时教程》试题
一、单选题
1、以下哪一个字符串直接量的定义方式是错误的( )
(1)'thank you'
(2)" "
(3)"a "friend" of yours"
(4)"a /"friend/" of yours"
2、以下哪一条语句是错误的( )
(1)$_= 'hello world';
(2)$a='hello world';
(3)my $b,$a='hello world';
(4)my ($a,$b)=(0,'hello world');
3、要使下面的程序正常运行,while后的表达式应选( )。
$a=0;$b=55;
while (表达式)
{
  $a+=2;
}
print "$a/n";
(1)$a = $b
(2)$a*$a <= $b
(3)$a != $b
(4)$b == 0
4、在Perl及其它程序设计语言中,数据是由( )。
(1)变量来表示的。
(2)运算符来表示的。
(3)变量的值来表示的。
(4)运算符的值来表示的。
5、@array是一个数组变量,语句print @array;输出的是:( )
(1)数组的各个元素。
(2)数组的大小。
(3)数组的第一个元素。
(4)什么都不输出。
6、语句$a = @array;执行后,变量$a的值是( )。
(1)数组@array的第一个元素的值。
(2)数组@array的大小。
(3)此语句语法是错的。
(4)未定义。
7、以下是用递归子程序求45的3次方,if后的表达式应该是( )
sub power
{
  ($m , $n)=@_;
  $n>=1 || die 'error!';
  return($m) if(表达式);
  return($m*power($m , $n-1));
}
print power(45,3);
(1)$n == 1
(2)$n < 0
(3)$n> = 1
(4)$n != 0
8、如要在子程序中接受两个作为参数的数组,则( )
(1)子程序用一个二维数组作形参。
(2)子程序用两个数组作形参。
(3)子程序用两个引用作形参。
(4)子程序不能被实现。
9、以下程序表达式1处将创建一个对包含命令行参数的数组@ARGV的引用$point,表达式1处应为( )
#!/usr/contrib/bin/perl -w
1: 表达式1
2: print "ARGV = ", join(",", 表达式2), "/n";
(1)my $point=@ARGV;
(2)my $point={@ARGV};
(3)my $point=ARGV;
(4)my $point=/@ARGV;
10、上题的程序表达式2处应为( )
(1)@$point
(2)$point
(3)@point
(4)/@point
11、模式/[^/d^-]/能匹配下面哪个字符串?( )
(1)-10
(2)200
(3)abc123
(4)#%@
12、以下哪个程序段能够显示哈希结构%abcd中所有的元素?( )
(1)foreach $Var (keys %abcd)
   {
     print “$Var /n”;
   }
(2)for ($I=0;$I<%abcd;$I++)
   {
     print “$%abcd{$I} /n”;
   }
(3)while ($Var (keys %abcd))
   {
     print “$Var /n”;
   }
(4)print join(‘/n’,%abcd);
13、以下程序执行后,变量$count的值是( )
  $Str=’hello world!’;
$count=0;
while ($Str=~m/(/w+)/g)
  {
    $count++;
  }
(1)1
(2)2
(3)3
(4)12
14、以下程序的作用是( )
  open(MYFILE,"temp.txt");
  while (<MYFILE>) {
    while ( /(/w)/g ) {
      $seen{$1}++;
    }
  }
  foreach $word(keys %seen)
  {
    print "$seen{$word} $word/n";
  }
  close(MYFILE);
(1)删除文件temp.txt中所有单词字符。
(2)统计temp.txt中各单词字符的出现频率。
(3)错误的程序。
(4)统计temp.txt中单词字符的总数。
15、如果在用POST方式提交给TEMP.CGI的URL中编码了一个名为MY的值,如
<FORM ACTION="lindi.com/temp.cgi?MY=20" METHOD="POST">这样的URL,而窗体中也有同名的一个域,如<INPUT TYPE="TEXT" NAME="MY" VALUE="1">。在TEMP.CGI中语句$Var=param('MY');执行后,变量$Var中值将为( )
(1)2
(2)undef
(3)20
(4)1
(答案)
二、判断题
1、语句print 'no!' if($a!='hello');执行后,当$a中值不等于'hello'时就会显示no!( )
2、运算符(+)能将两个字符串联结起来。( )
3、my操作符与local操作符作用是一样的。( )
4、语句print 'hello "World"';是正确的。( )
5、逻辑运算符(||)与(or)的优先级是一样的。( )
6、用语句my MYFILE;能够定义一个文件句柄类型的变量。( )
7、正则表达式 m'/u/jqpublic/perl/lindi' 等价于///u//jqpublic//perl//lindi/( )
8、管道的作用是将一个进程的标准输出作为另一个进程的标准输入。( )
9、模式匹配默认匹配的变量是$&( )
10、Perl的内置函数stat的参数可以是文件句柄或者文件名。( )
11、用Perl编的程序的可移植性很强,所以它不需修改即能在任何计算机系统上正确的运( )
12、语句$point={1=>'hello',2=>'world'};创建了一个对哈希结构的引用。( )
13、Perl的内置函数都是放在模块中的。( )
14、服务器与浏览器之间的通信只能通过一问一答的方式进行。( )
15、用CGI模块中的redirect函数能实现HTTP重定向。( )
(答案)
三、多选题
1、以下哪些表达式在字符串变量$Str中有子字符串’10mm’时为真?( )
(1)$Str=~/10mm/
(2)$Str=~//dmm/
(3)$Str=~//d?m*/
(4)index($Str,'10mm')!=-1
2、模式/(/d{4})-(/d{1,2})-(/d{1,3})/能够匹配下列哪些字符串?( )
(1)happy 2001-02-27
(2)today is 2001-2-7
(3)99-2-7
(4)02-27
3、Perl中的基本数据类型有:( )
(1)标量。
(2)数组。
(3)哈希结构。
(4)文件句柄。
4、尖括号运算符(<>)可用来( )
(1)读取文件。
(2)作模式匹配运算符
(3)搜索指定的文件。
(4)作程序的注释。
5、如要创建一个对列表(1..6)的引用,可以使用以下哪段代码?( )
(1)$point=(1..6);
(2)@array=(1..6);
   $point=/@array;
(3)my $point
   {
    my @array=(1..6)
$point=@array;
   }
(4)$point=[1..6];

6、当你的CGI程序不能运行时,可能是下述哪些情况?( )
(1)在浏览器地址栏中输错了CGI程序的URL地址。
(2)CGI程序中有错误。
(3)服务器不支持CGI程序。
(4)浏览器有问题。
7、用GET和POST方法提交窗体的区别在于( )
(1)GET方法是将窗体的值解码后放入URL提交而POST方法是直接传递给服务器。
(2)GET方法是将窗体的值直接传递给服务器而POST方法是解码后放入URL中提交。
(3)GET方法只能提交有限的值而POST能提交任意多的值给服务器。
(4)GET能通过将窗体的值设为CGI程序的地址来调用另一个CGI程序而POST方法不能。
8、为了使CGI程序尽量安全,我们应注意哪几点?( )
(1)不能用普通CGI窗体发送需要保密的信息。
(2)将CGI程序编译成执行文件。
(3)要在#!行上加-T开关。
(4)重要数据要在服务器端进行校验。
9、以下对隐藏域的说法那些是正确的?( )
(1)含有隐藏域的窗体只能用POST方法提交给服务器。
(2)如有一段HTML代码<INPUT TYPE=HIDDEN NAME=MYNAME VALUE=1>则是定义了一个隐藏域。
(3)用户不能改变隐藏域的值。
(4)CGI程序要记录用户的在其站点进行过的操作只有用隐藏域来实现。
10、cookie的作用是( )
(1)暂时保存与用户相关的信息。
(2)代替文件和数据库。
(3)没作用。
(4)直接对浏览器进行控制。
11、cook的局限性在于( )
(1)不能被用户删除,编辑和查看。
(2)生存期有限。
(3)只能被发出cookie的服务器接收。
(4)不是所有的浏览器都支持cookie。
12、以下对在CGI程序中发送电子邮件的说法,那些是对的?( )
(1)只有UNIX系统才能运行MTA方式发送邮件的CGI程序。
(2)用Net:SMTP模块写的发送邮件程序可运行于任何网络操作系统上。
(3)用MTA方式发送电子邮件是指CGI程序调用外部的MTA程序来发送电子邮件。
(4)Net:SMTP模块中是用send_mail函数来发送电子邮件的。
13、如要调用一个外部程序EDIT,可使用以下哪些方法?( )
(1)system("edit");
(2)$Var=qx{edit};
(3)"edit";
(4)open (MYFILE, "edit |");   
14、中断一个Perl程序可以使用那些方法?( )
(1)用exit函数。
(2)用die函数。
(3)用last函数。
(4)没有办法。
15、 以下对尖扩号运算符的使用那些是错误的?( )
(1)$Var=<STDOUT>;
(2)$Var=<STDIN>;
(3)$Var=<STDERR>;
(4)$Var=<>;
(答案)
四、实作题
1、我们在程序时会觉得加行号是件烦事,但源程序有行号在调试和阅读时又能带来不少方便,现请编写一个程序,能给文本文件加上行号。采用命令行方式将原文本文件名和加了行号后的生成的文本文件名传送给此程序。
2、Perl本身是不带文本编辑器的,但是我们在编写程序时不停敲入操作系统命令在文本编辑器和Perl解释程序中切换会很影响速度和思路的,但我们可以用Perl将文本编辑器和Perl解释程序粘合在一起。请编一个程序,能在你用文本编辑器编写后的源程序自动调用Perl解释程序来解释运行,在你看完结果后又返回文本编辑器继续对源程序进行修改。你需要编写的源程序名用命令行方式传送给此程序。
3、编写一个网上点歌的CGI程序,用户能通过HTML页中的下拉列表框进行点歌,CGI程序根据用户的选择播放不同的歌曲。
4、用CGI程序编写一个自动友情链接系统,能将用户提交的网站地址、网站名、网站图片等信息保存在文件中,并在用户访问时显示出来。

《Perl编程24学时教程》试题参考答案
一、单选题答案
1、(3)2、(3)3、(2)4、(3)5、(1)6、(2)7、(1)8、(3)9、(4)10、(1)11、(3)12、(1)13、(2)14、(2)15、(1),因为在标量上下文中包含两个元素的数组将返回数组的大小2

(返回)
二、判断题答案
1、错,比较字符串时不能用关系运算符(!=),而该用(ne),正确的语句是print 'no!' if($a ne 'hello');
2、错,(+)是数字运算符,联结字符串应用运算符(.)
3、错。
4、对。
5、错,(||)的优先级高于(and)。
6、错,文件句柄不能用my 操作符来定义。
7、对。
8、对。
9、错。应该是$_
10、对。
11、错,当其中有依赖于具体操作系统的代码时,移植时就需要进行修改。
12、对。
13、错。
14、错,则CGI程序还可以使用服务器推送的工作方式。
15、对。

(返回)
三、多选题答案
1、(1)(2)(3)(4)2 、(1)(2)3、(1)(2)(3)4、(1)(3)5、(2)(4)6、(1)(2)(3)(4)7、(1)(3)(4)8、(1)(3)(4)9、(2)(3)(4)
10、(1)11、(2)(4)11、(2)(3)(4)12、(2)(3)(4)13、(1)(2)(4)
14、(1)(2)(3)15、(1)(3)

(返回)
四、实作题答案

1、源程序如下:
#AddNum.pl
#!/usr/bin/perl
my $Text,SOURCE,DEST,$i=1;
@ARGV==2 or die "the number of parameter can but is 2!/n"; #参数数量须等于2。
open(SOURCE,$ARGV[0])||die $!; #打开源文件。
open(DEST,">$ARGV[1]")||die $!; #创建目标文件。
while(defined($Text=<SOURCE>)) #将原文件读一行到$Text中。
{
 print DEST "$i: $Text"; #写入目标文件。
 $i++; #行号加一。
}
print "file modify done!";
close(SOURCE); #关闭源文件。
close(DEST); #关闭目标文件。


2、源程序如下:
#!/usr/contrib/bin/perl -w
my $got;
@ARGV==1 or die "the number of parameter can but is 1!/n"; #参数数量须等于1。
while($got ne 'Q' and $got ne 'q')#按Q键退出。
{
 system("edit $ARGV[0]");
 system("perl $ARGV[0]");
 print 'enter Q to quit,enter other to continue:';
 $got =<STDIN>;
 chomp $got;
}
exit;


3、源程序如下:
# play.cgi
#!/usr/contrib/bin/perl -w
use strict;
use CGI qw(:all);
my(@Song,$i,$index);
@Song=('xieyuxin.mid','TianXianZi.mpg');
$index=0;
print header;
print start_html("点播歌曲");
$index=param('D1') if(param);
print "<BGSOUND src=$Song[$index] autostart=true loop=infinite>";
for($i=0;$i<@Song;$i++)
{
  $Song[$i]='';
  $Song[$i]='selected' if($i=$index);
}
print <<END_PAGE_PLAY;
<form method=POST action=play.cgi>
 <p><center><select size=1 name=D1 OnChange=this.form.submit();>
 <option value=0 $Song[0]>歌曲1</option>
 <option value=1 $Song[1]>歌曲2</option>
 </select></center></p>
</form>
END_PAGE_PLAY
print end_html;

4、源程序如下:
文件1( HTML页LOGO.HTM )
<html>
<head>
<title>登记链结</title>
</head>
<body text="#000000" bgcolor="#FFFFCC">
<form method="POST" action="friend.cgi">
 <p><center>网站名称<input type="text" name="Name" size="20"></center></p>
 <p><center>网站地址<input type="text" name="Adderss" size="20"></center></p>
 <p><center>网站图片<input type="text" name="Pic" size="20"></center></p>
 <p><center><input type="submit" value="提交" name="B1"><input type="reset" value="全部重写" name="B2"></center></p>
</form>
</body>
</html>

文件2(friend.cgi)
# friend.cgi
#!/usr/contrib/bin/perl -w
# 程序设计(林杕)
use strict;
use CGI qw(:all);
use Fcntl qw(:flock);
my($Name,$Adderss,$Pic,$Line,$i);
print header;
print start_html("友情链结");
open(FRIEND,"+>>friend.txt");

if(param)
{
  $Name=param('Name');
  $Adderss=param('Adderss');
  $Pic=param('Pic');
  print FRIEND "$Name/n";
  print FRIEND "$Adderss/n";
  print FRIEND "$Pic/n";
  seek(FRIEND,0,0);
}

print '<table border="1" width="100%">';
while($End)
{
  last if(!defined($Name=<FRIEND>));
  last if(!defined($Adderss=<FRIEND>));
  last if(!defined($Pic=<FRIEND>));
  print <<END_PAGE_FRIEND;
   <tr>
    <td><a href=$Adderss><center><img border=0 src=$Pic></center>
     <p><center>$Name</center></p></a>
    </td>
   </tr>
  END_PAGE_FRIEND
}
print '</table>';
close(FRIEND);
print end_html;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值