设为首页 收藏本站
查看: 876|回复: 0

[经验分享] Perl语言入门-第四章-子程序-习题

[复制链接]
发表于 2015-12-27 09:46:35 | 显示全部楼层 |阅读模式
  1. 题目
DSC0000.png
DSC0001.png
DSC0002.png
  2. 代码  


  1 #-----------------------------------------------------------#
  2 # Source: Learning Perl, chapter4
  3 # Date:   2012-01-14
  4 # Author: xiaodongrush
  5 #-----------------------------------------------------------#
  6 #                          code-1                           #
  7 #-----------------------------------------------------------#
  8 $split = "-------------------------------------------------";
  9 $code1 = 'sub sum {'                   . "\n" .
10          '  my $result = 0;'           . "\n" .
11          '  foreach(@_) {'             . "\n" .
12          '    $result += $_;'          . "\n" .
13          '  }'                         . "\n" .
14          '  $result;'                  . "\n" .
15          '}'                           . "\n" .
16          'print &sum(1,3,5,7,9). "\n";';
17 print "code-1\n" . $code1 . "\n" . $split;
18 #-----------------------------------------------------------#
19 #                          execute-1                        #
20 #-----------------------------------------------------------#
21 print "\nexecute-1\n";
22 sub sum {
23   my $result = 0;
24   foreach(@_) {
25     $result += $_;
26   }
27   $result;
28 }
29 print &sum(1,3,5,7,9) . "\n";
30 #-----------------------------------------------------------#
31 #                          code-2                           #
32 #-----------------------------------------------------------#
33 $code2 = 'print &sum(1..1000) + "\n";';
34 print $split . "\ncode-2\n" . $code2 . "\n" . $split;
35 #-----------------------------------------------------------#
36 #                          execute-2                        #
37 #-----------------------------------------------------------#
38 print "\nexecute-2\n";
39 print &sum(1..1000) . "\n";
40 #-----------------------------------------------------------#
41 #                          code-3                           #
42 #-----------------------------------------------------------#
43 $code3 = 'sub average {'                                           . "\n" .
44          '  my $result = 0;'                                       . "\n" .
45          '  if(@_ == 0) { return 0; }'                             . "\n" .
46          '  foreach(@_) { $result += $_; }'                        . "\n" .
47          '  $result /= @_;'                                        . "\n" .
48          '}'                                                       . "\n" .
49          'sub above_average {'                                     . "\n" .
50          '  my @array;'                                            . "\n" .
51          '  my $aver = &average(@_);'                              . "\n" .
52          '  foreach(@_) { if($_ > $aver) { push(@array, $_); } }'  . "\n" .
53          '  @array;'                                               . "\n" .
54          "}"                                                       ;
55 print $split . "\ncode-3\n" . $code3 . "\n" . $split;
56 #-----------------------------------------------------------#
57 #                          execute-3                        #
58 #-----------------------------------------------------------#
59 print "\nexecute-3\n";
60 sub average {
61   my $result = 0;
62   if(@_ == 0) { return 0; }
63   foreach(@_) { $result += $_; }
64   $result /= @_;
65 }
66 sub above_average {
67   my @array;
68   my $aver = &average(@_);
69   foreach(@_) { if($_ > $aver) { push(@array, $_); } }
70   @array;
71 }
72 print &average(1..10) . "\n";
73 foreach(&above_average(1..10)) { print $_ . "\n";}
74 #-----------------------------------------------------------#
75 #                          code-4                           #
76 #-----------------------------------------------------------#
77 $code4 = 'use feature qw(state);'                                  . "\n" .
78          'sub greet {'                                             . "\n" .
79          '  state $last_name = undef;'                             . "\n" .
80          '  print "Hi " . @_[0] . "! ";'                           . "\n" .
81          '  if($last_name eq undef) { print "You are the first one here!\n"; }'   . "\n" .
82          '  else { print "I\'ve seen: " . $last_name . "\n";}'     . "\n" .
83          '  $last_name = @_[0];'                                   . "\n" .
84          '}'                                                       . "\n" .
85          '&greet("Fred");'                                         . "\n" .
86          '&greet("Barney");'                                       ;
87 print $split . "\ncode-4\n" . $code4 . "\n" . $split;
88 #-----------------------------------------------------------#
89 #                          execute-4                        #
90 #-----------------------------------------------------------#
91 print "\nexecute-4\n";
92 use feature qw(state);
93 sub greet {
94   state $last_name;
95   print "Hi " . @_[0] . "! ";
96   if(!defined($last_name)) { print "You are the first one here!\n"; }
97   else { print "I've seen: " . $last_name . "\n";}
98   $last_name = @_[0];
99 }
100 &greet("Fred");
101 &greet("Barney");
102 #-----------------------------------------------------------#
103 #                          code-5                           #
104 #-----------------------------------------------------------#
105 $code5 = 'use feature qw(state);'                                  . "\n" .
106          'sub greet_version2 {'                                    . "\n" .
107          '  state @last_names;'                                    . "\n" .
108          '  print "Hi " . @_[0] . "! ";'                           . "\n" .
109          '  if(@last_names == 0)  { print "You are the first one here!\n"; }'
110                                                                    . "\n" .
111          '  else {'                                                . "\n" .
112          '    print "I\'ve seen: ";'                                . "\n" .
113          '    foreach(@last_names) { print " " . $_; }'            . "\n" .
114          '    print "\n";'                                         . "\n" .
115          '  }'                                                     . "\n" .  
116          '  push(@last_names, @_[0]);  '                           . "\n" .  
117          '}'                                                       . "\n" .
118          '&greet_version2("Fred");'                                . "\n" .
119          '&greet_version2("Barney");'                              . "\n" .
120          '&greet_version2("Wilma");'                               . "\n" .
121          '&greet_version2("Betty");'                               ;
122 print $split . "\ncode-5\n" . $code5 . "\n" . $split;
123 #-----------------------------------------------------------#
124 #                          execute-5                        #
125 #-----------------------------------------------------------#
126 print "\nexecute-5\n";
127 use feature qw(state);
128 sub greet_version2 {
129   state @last_names;
130   print "Hi " . @_[0] . "! ";
131   if(@last_names == 0) { print "You are the first one here!\n"; }
132   else {
133     print "I've seen: ";
134     foreach(@last_names) { print " " . $_; }
135     print "\n";
136   }
137   push(@last_names, @_[0]);   
138 }
139 &greet_version2("Fred");
140 &greet_version2("Barney");
141 &greet_version2("Wilma");
142 &greet_version2("Betty");
143 #-----------------------------------------------------------#
144 print "END!!!";
145 <STDIN>
146 #-----------------------------------------------------------#
147 # 总结
148 # 1. 子程序定义用sub关键字,子程序调尽量用&(当与内置函数重名,
149 #    或者函数定义在函数调用之后时,必须用&)
150 # 2. 子程序参数列表:@_,子程序返回值:最后一行,或者return。
151 # 3. state这个是在perl 5.0.10里面提供的功能,要么加入use feature qw(state);
152 #    要么加入use 5.010;
153 # 3. reverse,sort,这些函数与chomp不同,更像返回值,而chomp直接修改了原数组,或者原变量
154 # 4. 字符串判断是否存在用:$last_name eq undef
155 # 5. 单引号字符串内的单引号需要转义
156 #    '  else { print "I\'ve seen: " . $last_name . "\n";}'     . "\n" .
157 # 6. 私有持久列表变量不能初始化,即state @array = undef; 这是错误的。
158 # 7. 标量在没有被赋值前,是undef状态,undef在数值上下文中,转化为0,
159 #    在字符串上下文,转化为空串,判断一个变量是否是undef状态,用defined($_var)
160 # 8. 数组在没有被赋值前,不是undef状态,仅仅是个空数组,判断其是否为空:@array == 0  3. 输出
DSC0003.png
DSC0004.png
DSC0005.png
DSC0006.png
  4. 文件
  /Files/pangxiaodong/LearningPerl/ch4-answer.rar

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156834-1-1.html 上篇帖子: perl中的引用 下篇帖子: perl调用shell
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表