- 论坛徽章:
- 59
|
本帖最后由 renxiao2003 于 2011-02-28 10:50 编辑
大赛试题:
1. 请正确的精简如下代码。
sub myfunc {
# $x = ...;
if ( $x ) {
return 1;
} else {
return;
}
}
答案:- sub myfunc{
- # $x=...;
- $x?1:return;
- }
复制代码 2. $x=()结果是什么?列表位于标量上下文是什么情况?()是不是用来创建空的list?请解释原因。
答案:- $x=()结果是空列表,0个元素的列表;列表位于标量上下文是反转。()用来创建空的list。
复制代码 3. 1,2,3,5,6,7,8 如何合并成1-3,5-8?
没办法,你们已经正则了。我只能用这种老古董的办法。要不我就是抄袭了啊。
答案:- #!/usr/bin/perl
- $str="1,2,3,5,6,7,8";
- @array=split(/,/,$str);
- $len = @array;
- $start=0;
- $end=0;
- $pos=0;
- $startpos=0;
- $outstr="";
- if ($len>1){
- for($i=0;$i<$len-1;$i++){
- if ($array[$i] + 1 == $array[$i+1]){
- $pos=$i+1;
- }else{
- if ($outstr eq ""){
- $outstr=$array[$startpos] . "-" . $array[$pos];
- }else{
- $outstr=$outstr . "," . $array[$startpos] . "-" . $array[$pos];
- }
- $startpos=$i+1;
- }
- if ($pos==$len-1){
- $outstr=$outstr ."," . $array[$startpos] . "-" . $array[$pos];
- }
- }
- }
- print $outstr . "\n";
复制代码 4.@x=(5,7,9); $x[1]与@x[1]的区别是什么?
答案:$是一般变量,而@是数组变量。但因为@x指向的是一个列表,所以在这里$x[1]与@x[1]输出是一样的。
5. 用最短和优的perl代码对当前目录下的文件和子目录按修改时间进行排序。
答案:- #!/usr/bin/perl
- use strict;
- use warnings;
- print for ( system "ls -lt");
复制代码 6.传入一串数字并返回所有大于平均值的数字。
答案:- #!/usr/bin/perl
- print "please input number,user ',' split:\n";
- $x=<STDIN>;
- @arr=split(/,/,$x);
- sub average{
- $len=@arr;
- $sum=0;
- for($i=0;$i<$len;$i++){
- $sum = $sum + @arr[$i];
- }
- return $sum/$len;
- }
- sub getratheravg{
- $avg=average;
- @arr1;
- for($i=0;$i<@arr;$i++){
- if (@arr[$i]>$avg){
- push(@arr1,@arr[$i]);
- }
- }
- return @arr1;
- }
- #test
- @arrx=getratheravg;
- for($i=0;$i<@arrx;$i++){
- print @arrx[$i];print " ";
- }
复制代码 7.让用户不断猜测范围从1到100的秘密数字,直到猜中为止。程序应该以魔术公式lnt(1+rand 100)来随机产生秘密数字。当用户猜错时,程序应相应“too high”或者“too low”。如果用户quit或者exit或者键入一个空白行程序就中止。当然如果用户猜到了,程序也应该中止。
答案:- #!/usr/bin/perl
- $key=int(1+rand 100);
- print "please input a number (1~100):\n";
- while($guess = <STDIN>)
- {
- chomp($guess);
- if ($guess eq "quite" || $guess eq "exit" || $guess =~/\s*/)
- {
- exit(1);
- }
- elsif($guess > $key)
- {
- print "to high\n";
- }
- elsif($guess < $key)
- {
- print "to low\n";
- }
- elsif($guess == $key)
- {
- print "you guess right\n";
- exit;
- }
- }
复制代码 8. 写一个简单的TCP Echo Server,在linux/unix环境运行,侦听在特定端口,接受用户的网络输入,并返回同样的数据给对方,能接受quit命令。
基本要求:
(1)无阻塞IO。
(2)daemon方式运行。
(3)能接受kill -HUP重启信号。 |
|