免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1973 | 回复: 6

[Perl练习] 数组 [复制链接]

论坛徽章:
0
发表于 2013-05-22 14:17 |显示全部楼层
本帖最后由 brantc 于 2013-05-22 14:55 编辑

其实小弟很少用Perl,但是用起来的时候又抓狂,所以空的时候就想攒点小抄,cheat sheet。
最近看Programming Perl,俗称大骆驼,看到数据结构那章简直震惊了。。。。。看不下去了。。。。必须练!
所以就自己想着办法练了下面的代码,用了两个半天的时间,先想可能用到的形式,然后自己想办法完成生成、引用、打印。。。。
开始觉得有点无聊,但是真的只有练了你才晓得价值!因为再看书的时候,比原来轻松太多了。。。。相信也会比光看扎实得多:wink:

现在就把练习code帖论坛,大家有兴趣也可以看看,相信对对跟我一样的初学者会有帮助的

哦,解释下,最后的summary里面T就是True,F就是False,B是Bad usage,不推荐的做法:wink:
  1. #!/usr/bin/env perl

  2. =pod

  3. =head1 datastructure_ref_test01.tst

  4. =head2 COPYRIGHT

  5. Copyright 2012 - 2013 Brant (brantchen2008@gmail.com), All Rights Reserved

  6. =head2 SYNOPSIS

  7. datastructure_ref_test01.

  8. =head2 DESCRIPTION

  9. datastructure_ref_test01

  10. =head2 USAGE        

  11. =begein html

  12. <pre>
  13. Your usage here.
  14. Your options here.
  15. </pre>

  16. =end html

  17. =head2 NOTES

  18. =begin html

  19. <table border=0>
  20. <tr>  <td width=626 valign=top style='width:469.8pt;border:solid #FFD966 1.0pt;background:#FFF2CC;'>   <p>
  21. <pre>
  22.   Your notes here.
  23. </pre>
  24. </p>  </td> </tr>
  25. </table>

  26. =end html

  27. =head2 AUTHOR

  28. =begin html

  29. <B>Author:</B>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Brant </br>
  30. <B>Organization: </B>&nbsp     </br>

  31. =end html

  32. =head2 VERSION_INFOR

  33. =begin html

  34. <B>Version:</B>&nbsp&nbsp 1.0                  </br>
  35. <B>Created:</B>&nbsp&nbsp&nbsp 2013-5-20 14:50:31 </br>
  36. <B>Revision:</B>&nbsp 1.0                      </br>

  37. =end html

  38. =cut

  39. use strict;
  40. use warnings;
  41. use utf8;

  42. #------------------------------------------------------------------------------
  43. # Array
  44. #------------------------------------------------------------------------------

  45. #my @a1=(array_01 array_02 array_03);  # False
  46. #my @a2=(array_01, array_02, array_03);# False
  47. my @a3 = ( 1, 2, 3);
  48. print "\n\@a3: @a3";
  49. my @a4 = ( "array_01", "array_02", "array_03" );
  50. print "\n\@a4: @a4";

  51. my @a5 = qw/array_01 array_02 array_03/;
  52. print "\n\@a5: @a5";

  53. my $t1="insert var";

  54. my @a6 = qw/$t1 array_02 array_03/;
  55. print "\n\@a6: @a6";

  56. print "\nPrint \@a6:\n";
  57. foreach my $i (@a6) {
  58.   print "  ". $i . "\n";
  59. }
  60. print "Print \@a6 done.\n";

  61. my @a7 = qq/array_01 array_02 array_03/;
  62. print "\n\@a7: @a7";
  63. print "\n\$a7[0]: " . $a7[0];
  64. my @a8 = qq/$t1 array_02 array_03/;
  65. print "\n\@a8: @a8\n";

  66. my @a9 = [1 ,2, 3];
  67. print "\n\@a9: @a9\n";
  68. print "\$a9[0]: " . $a9[0] . "\n";
  69. print "\@{\$a9[0]}[0]: "    . @{$a9[0]}[0] . "\n";
  70. print "\$a9->[0]: " . $a9[0]->[0] . "\n";
  71. print "\$a9->[1]: " . $a9[0]->[1] . "\n";
  72. print "\$a9->[2]: " . $a9[0]->[2] . "\n";

  73. print "\nPrint \@a9:\n";
  74. foreach my $i (@{$a9[0]}) {
  75.   print "  ". $i . "\n";
  76. }
  77. print "Print \@a9 done.\n\n";

  78. my $a10 = [1 ,2, 3];
  79. print "\$a10: "      . $a10 . "\n";
  80. print "\@{$a10}: "   . @{$a10}[0] . "\n";
  81. print "\$a10->[0]: " . $a10->[0] . "\n";
  82. print "\$a10->[1]: " . $a10->[1] . "\n";
  83. print "\$a10->[2]: " . $a10->[2] . "\n";

  84. print "\nPrint array ref \$a10:\n";
  85. foreach my $i (@{$a10}) {
  86.   print "  ". $i . "\n";
  87. }
  88. print "Print array ref \$a10 done.\n\n";

  89. my @a11 =[[1 ,2, 3]];
  90. print "\n\@a11: @a11\n";
  91. print "\$a11[0]: "             . $a11[0] . "\n";
  92. print "\$a11[0]->[0]: "        . $a11[0]->[0] . "\n";
  93. print "\@{\$a11[0]->[0]}[0]: " . @{$a11[0]->[0]}[0] . "\n";
  94. print "\@{\$a11[0][0]}[0]: "   . @{$a11[0][0]}[0] . "\n";
  95. print "So, as you see above two format, if a11 is an array, \@{\$a11[0][0]}[0] and \@{\$a11[0]->[0]}[0] are both ok if you drop all -> in {}.\n";
  96. print "\$a11[0]->[0][0]: "     . $a11[0]->[0][0] . "\n";
  97. print "\$a11[0]->[0][1]: "     . $a11[0]->[0][1] . "\n";
  98. print "\$a11[0]->[0][2]: "     . $a11[0]->[0][2] . "\n";

  99. print "\nPrint \@a11:\n";
  100. foreach my $i (@{$a11[0]->[0]}) {
  101.   print "  ". $i . "\n";
  102. }
  103. print "Print \@a11 done.\n\n";

  104. my $a12 =[[1 ,2, 3]];
  105. print "\n\$a12: "           . $a12 . "\n";
  106. print "\$a12->[0]: "        . $a12->[0] . "\n";
  107. print "\@{\$a12->[0]}[0]: " . @{$a12->[0]}[0] . "\n";
  108. print "\$a12->[0][0]: "     . $a12->[0][0] . "\n";
  109. print "Actually, \$a12->[0]->[0] and \$a12[0]->[0] are both ok, if you only keep one -> in case perl thought it's \@a12.\n";
  110. print "\$a12->[0]->[1]: "   . $a12->[0][1] . "\n";
  111. print "\$a12->[0]->[2]: "   . $a12->[0][2] . "\n";

  112. print "\nPrint \$a12:\n";
  113. foreach my $i (@{$a12->[0]}) {
  114.   print "  ". $i . "\n";
  115. }
  116. print "Print \@a12 done.\n\n";

  117. my @a13 =[[[1 ,2, 3]]];
  118. print "\n\@a13: @a13\n";
  119. print "\$a13[0]: "              . $a13[0] . "\n";
  120. print "\$a13[0]->[0]: "         . $a13[0]->[0] . "\n";
  121. print "\$a13[0]->[0][0]: "      . $a13[0]->[0][0] . "\n";
  122. print "\$a13[0][0][0]: "        . $a13[0][0][0] . "\n";
  123. print "\@{\$a13[0][0][0]}[0]: " . @{$a13[0][0][0]}[0] . "\n";
  124. print "\$a13[0][0][0]->[0]: "   . $a13[0][0][0]->[0] . "\n";
  125. print "\$a13[0][0][0]->[1]: "   . $a13[0][0][0]->[1] . "\n";
  126. print "\$a13[0][0][0]->[2]: "   . $a13[0][0][0]->[2] . "\n";

  127. print "\nPrint \@a13:\n";
  128. foreach my $i (@{$a13[0]->[0][0]}) {
  129.   print "  ". $i . "\n";
  130. }
  131. print "Print \@a13 done.\n\n";


  132. my $a14 =[[[1 ,2, 3]]];
  133. print "\n\@a14: "                 . $a14 . "\n";
  134. print "\$a14->[0]: "              . $a14->[0] . "\n";
  135. print "\$a14->[0]->[0]: "         . $a14->[0]->[0] . "\n";
  136. print "\$a14->[0]->[0]->[0]: "    . $a14->[0]->[0]->[0] . "\n";
  137. print "\@{\$a14->[0][0]}[0]: "    . @{$a14->[0][0]}[0] . "\n";
  138. print "\@{\$a14->[0][0]}[1]: "    . @{$a14->[0][0]}[1] . "\n";
  139. print "\@{\$a14->[0][0]}[2]: "    . @{$a14->[0][0]}[2] . "\n";
  140. #print "\@{\$a14->[0][0]}->[0]: "  . @{$a14->[0][0]}->[0] . "\n"; # Warning: use an array as a ref is deprecated.
  141. #print "\@{\$a14->[0][0]}->[1]: "  . @{$a14->[0][0]}->[1] . "\n";
  142. #print "\@{\$a14->[0][0]}->[2]: "  . @{$a14->[0][0]}->[2] . "\n";
  143. print "\@{\$a14->[0]}[0]->[0]: "  . @{$a14->[0]}[0]->[0] . "\n";
  144. print "\@{\$a14->[0]}[0]->[1]: "  . @{$a14->[0]}[0]->[1] . "\n";
  145. print "\@{\$a14->[0]}[0]->[2]: "  . @{$a14->[0]}[0]->[2] . "\n";
  146. print "\$a14->[0]->[0][0]: "      . $a14->[0]->[0][0] . "\n";
  147. print "\$a14->[0]->[0][1]: "      . $a14->[0]->[0][1] . "\n";
  148. print "\$a14->[0]->[0][2]: "      . $a14->[0]->[0][2] . "\n";

  149. print "\nPrint \@a14:\n";
  150. foreach my $i (@{$a14->[0][0]}) {
  151.   print "  ". $i . "\n";
  152. }
  153. print "Print \@a13 done.\n\n";



  154. my $t2 = "sub string";
  155. print qq(This is $t2) . "\n";

  156. # Print anonymouse array, output: Thisis$t
  157. # print "Bad use: qw(This is $t2) [" . qw(This is $t2) . "]\n";



  158. #------------------------------------------------------------------------------
  159. # Array, two-dimensional
  160. #------------------------------------------------------------------------------

  161. my @aa01 = ([1,2,3], [4,5,6]);
  162. print "\@aa01: "       . @aa01 . "\n";
  163. print "\$aa01[0]: "    . $aa01[0] . "\n";
  164. print "\$aa01[0][0]: " . $aa01[0][0] . "\n";
  165. print "Print \@aa01 in one line: @aa01 \n";
  166. print "Print \@aa01 in for loop: \n";
  167. print "foreach my \$i (\@aa01)\n";
  168. foreach my $i (@aa01) {
  169.   print "  " . $i . "\n";
  170.   print "  in one line: @{$i}\n";
  171.   foreach my $j (@{$i}) {
  172.     print "    " . $j . "\n";
  173.   }
  174. }
  175. print "Print \@aa01 in for loop done.\n\n";

  176. # Summary Print
  177. my $summary = <<END;
  178. #------------------------------------------------------------------------------
  179. # Summary: Array
  180. #------------------------------------------------------------------------------
  181. F: my \@a1=(array_01  array_02  array_03);  
  182. F: my \@a2=(array_01, array_02, array_03);
  183. T: my \@a3=(1, 2, 3);
  184. T: my \@a4=("array_01","array_02","array_03");
  185. T: my \@a5=qw/array_01 array_02 array_03/;
  186. B: my \@a6=qw/\$t array_02 array_03/;       # \@a6[0] is \$t with not replace \$t value.
  187. B: my \@a7=qq/array_01 array_02 array_03/; # \@a7[0] is "array_01 array_02 array_03" now.
  188. B: my \@a8 = qq/\$t1 array_02 array_03/;    # Ditto.
  189. B: my \@a9 = [1 ,2, 3];                    # You made a array ref to \@a9 (same as \$a9[0]).
  190.                                           # You should use \$a9[0]->[0] to use 1, etc.
  191.                                           # You should iterate like this in foreach:  foreach my \$i (\@{\$a9[0]}) {
  192. T: my \$a10 = [1 ,2, 3];                   # As I see, best practise is that you'd better use scalar as a ref always.
  193. B: my \@a11 = [[1 ,2, 3]];
  194. T: my \$a11 = [[1 ,2, 3]];                 # Ditto.
  195. B: my \@a11 = [[[1 ,2, 3]]];               
  196. T: my \$a11 = [[[1 ,2, 3]]];               # Ditto.
  197. T: print qq(This is \$t) . "\\n";
  198. B: print qw(This is \$t) . "\\n";           # Output is: Thisis\$t
  199. #------------------------------------------------------------------------------\n\n
  200. END

  201. print $summary;
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2013-05-22 14:24 |显示全部楼层
有趣的小抄
收藏了!

论坛徽章:
0
发表于 2013-05-22 14:58 |显示全部楼层
回复 2# rubyish

您老都富足长乐还收藏我们这小打小闹的东西,真是感谢捧场了
   

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2013-05-22 14:58 |显示全部楼层
示例和习题都敲一遍,平时写些自己可以用到的小程序进步会很快的。教程类的书都写的很易懂使人容易高估自己的记忆力,看到脑袋一团浆糊了才发现什么都没学到

论坛徽章:
0
发表于 2013-05-22 16:55 |显示全部楼层
回复 4# zhlong8


    嗯!

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2013-05-22 17:10 |显示全部楼层
brantc 发表于 2013-05-22 10:58
回复 2# rubyish

您老都富足长乐还收藏我们这小打小闹的东西,真是感谢捧场了

因收藏而富足
谢谢了!

论坛徽章:
0
发表于 2013-05-22 18:10 |显示全部楼层
rubyish 发表于 2013-05-22 17:10
因收藏而富足  
谢谢了!


专业酱油党,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP