Chinaunix

标题: Perl大赛参考答案 [打印本页]

作者: 兰花仙子    时间: 2011-03-30 11:47
标题: Perl大赛参考答案
perl大赛地址:http://bbs.chinaunix.net/thread-1860259-1-1.html
1. 标准答案:
  1. sub myfunc {
  2.     #x = ...;
  3.     return $x ? 1 : ();
  4. }
复制代码
2. 标准答案:
(1) undef

(2) 从来不存在列表位于标量上下文的情况
    perldoc -q "What is the difference between a list and an array":
       As a side note, there’s no such thing as a list in scalar context.  When you say
               $scalar = (2, 5, 7, 9);
       you’re using the comma operator in scalar context, so it uses the scalar comma operator.


(3) ()不是用来创建list(或空list),它的作用是用来分组,或者语法需要。
    the () are meaningless there. they just group.
    as i keep saying parens in general in perl are for grouping and
    syntax and not much else (to most newbie's surprise). they don't make lists.
    they are useful to delineate where a list is (that is grouping).



3. 参考答案:
   参考这个帖子里祖儿的回答:
   http://bbs.chinaunix.net/viewthread.php?tid=1840398


4. 标准答案:
    $x[1]是访问数组元素,返回结果是标量;@x[1]是访问数组分片,返回结果是列表。
       The former is a scalar value; the latter an array slice, making it a list with one (scalar) value.  You should use $ when
       you want a scalar value (most of the time) and @ when you want a list with one scalar value in it (very, very rarely;
       nearly never, in fact).



5. 参考答案:

  1.     print join "\n",map {$_->[0]} sort {$a->[1] <=> $b->[1]} map { [$_,(stat)[9]] } <*>;
复制代码
第6和7题答案:
   题目来自Learning Perl的练习题, 自己翻书参考吧。


8. 参考答案:
   此题没有标准答案,用多种方法都可以实现,比如进程、线程、IO Select、AnyEvent、POE等。
   CPAN上关于此类应用的优秀模块多如繁星。例如这个AnyEvent的HTTP客户端:
   http://search.cpan.org/~mlehmann/AnyEvent-HTTP-2.1/HTTP.pm

   本版我的两个socket server参考实现:
   多进程:http://bbs.chinaunix.net/viewthread.php?tid=885153
   IO::Select: http://bbs.chinaunix.net/thread-1829237-1-1.html

   代码可读、严谨,程序功能实现、运行稳定,是评分标准。
作者: 无风之谷    时间: 2011-03-30 11:58
辛苦仙子!{:3_190:}
作者: x9x9    时间: 2011-03-30 11:58
when you want a list with one scalar value in it (very, very rarely;nearly never, in fact).

难怪没咋见过,真不知道什么情况下这样用。
作者: lbk90032190    时间: 2011-03-31 09:55
有的题目出的也太偏了
作者: hitsubunnu    时间: 2011-03-31 16:55
8. 写一个简单的TCP Echo Server,在linux/unix环境运行,侦听在特定端口,接受用户的网络输入,并返回同样的数据给对方,能接受quit命令。
基本要求:
(1)无阻塞IO。
(2)daemon方式运行。
(3)能接受kill -HUP重启信号。

8. 参考答案:
   此题没有标准答案,用多种方法都可以实现,比如进程、线程、IO Select、AnyEvent、POE等。
   CPAN上关于此类应用的优秀模块多如繁星。例如这个AnyEvent的HTTP客户端:
   http://search.cpan.org/~mlehmann/AnyEvent-HTTP-2.1/HTTP.pm


TCP Echo Server是server
AnyEvent-HTTP是client
AnyEvent-HTTP 说白了就是个wget 跟TCP Echo Server完全没关系啊
作者: 2gua    时间: 2011-03-31 17:27
仙子辛苦啦!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2