在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 题目
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. 输出
4. 文件 /Files/pangxiaodong/LearningPerl/ch4-answer.rar |
请发表评论