- 论坛徽章:
- 0
|
本帖最后由 brantc 于 2013-05-22 14:55 编辑
其实小弟很少用Perl,但是用起来的时候又抓狂,所以空的时候就想攒点小抄,cheat sheet。
最近看Programming Perl,俗称大骆驼,看到数据结构那章简直震惊了。。。。。看不下去了。。。。必须练!
所以就自己想着办法练了下面的代码,用了两个半天的时间,先想可能用到的形式,然后自己想办法完成生成、引用、打印。。。。
开始觉得有点无聊,但是真的只有练了你才晓得价值!因为再看书的时候,比原来轻松太多了。。。。相信也会比光看扎实得多:wink:
现在就把练习code帖论坛,大家有兴趣也可以看看,相信对对跟我一样的初学者会有帮助的
哦,解释下,最后的summary里面T就是True,F就是False,B是Bad usage,不推荐的做法:wink:- #!/usr/bin/env perl
- =pod
- =head1 datastructure_ref_test01.tst
- =head2 COPYRIGHT
- Copyright 2012 - 2013 Brant (brantchen2008@gmail.com), All Rights Reserved
- =head2 SYNOPSIS
- datastructure_ref_test01.
- =head2 DESCRIPTION
- datastructure_ref_test01
- =head2 USAGE
- =begein html
- <pre>
- Your usage here.
- Your options here.
- </pre>
- =end html
- =head2 NOTES
- =begin html
- <table border=0>
- <tr> <td width=626 valign=top style='width:469.8pt;border:solid #FFD966 1.0pt;background:#FFF2CC;'> <p>
- <pre>
- Your notes here.
- </pre>
- </p> </td> </tr>
- </table>
- =end html
- =head2 AUTHOR
- =begin html
- <B>Author:</B>         Brant </br>
- <B>Organization: </B>  </br>
- =end html
- =head2 VERSION_INFOR
- =begin html
- <B>Version:</B>   1.0 </br>
- <B>Created:</B>    2013-5-20 14:50:31 </br>
- <B>Revision:</B>  1.0 </br>
- =end html
- =cut
- use strict;
- use warnings;
- use utf8;
- #------------------------------------------------------------------------------
- # Array
- #------------------------------------------------------------------------------
- #my @a1=(array_01 array_02 array_03); # False
- #my @a2=(array_01, array_02, array_03);# False
- my @a3 = ( 1, 2, 3);
- print "\n\@a3: @a3";
- my @a4 = ( "array_01", "array_02", "array_03" );
- print "\n\@a4: @a4";
- my @a5 = qw/array_01 array_02 array_03/;
- print "\n\@a5: @a5";
- my $t1="insert var";
- my @a6 = qw/$t1 array_02 array_03/;
- print "\n\@a6: @a6";
- print "\nPrint \@a6:\n";
- foreach my $i (@a6) {
- print " ". $i . "\n";
- }
- print "Print \@a6 done.\n";
- my @a7 = qq/array_01 array_02 array_03/;
- print "\n\@a7: @a7";
- print "\n\$a7[0]: " . $a7[0];
- my @a8 = qq/$t1 array_02 array_03/;
- print "\n\@a8: @a8\n";
- my @a9 = [1 ,2, 3];
- print "\n\@a9: @a9\n";
- print "\$a9[0]: " . $a9[0] . "\n";
- print "\@{\$a9[0]}[0]: " . @{$a9[0]}[0] . "\n";
- print "\$a9->[0]: " . $a9[0]->[0] . "\n";
- print "\$a9->[1]: " . $a9[0]->[1] . "\n";
- print "\$a9->[2]: " . $a9[0]->[2] . "\n";
- print "\nPrint \@a9:\n";
- foreach my $i (@{$a9[0]}) {
- print " ". $i . "\n";
- }
- print "Print \@a9 done.\n\n";
- my $a10 = [1 ,2, 3];
- print "\$a10: " . $a10 . "\n";
- print "\@{$a10}: " . @{$a10}[0] . "\n";
- print "\$a10->[0]: " . $a10->[0] . "\n";
- print "\$a10->[1]: " . $a10->[1] . "\n";
- print "\$a10->[2]: " . $a10->[2] . "\n";
- print "\nPrint array ref \$a10:\n";
- foreach my $i (@{$a10}) {
- print " ". $i . "\n";
- }
- print "Print array ref \$a10 done.\n\n";
- my @a11 =[[1 ,2, 3]];
- print "\n\@a11: @a11\n";
- print "\$a11[0]: " . $a11[0] . "\n";
- print "\$a11[0]->[0]: " . $a11[0]->[0] . "\n";
- print "\@{\$a11[0]->[0]}[0]: " . @{$a11[0]->[0]}[0] . "\n";
- print "\@{\$a11[0][0]}[0]: " . @{$a11[0][0]}[0] . "\n";
- 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";
- print "\$a11[0]->[0][0]: " . $a11[0]->[0][0] . "\n";
- print "\$a11[0]->[0][1]: " . $a11[0]->[0][1] . "\n";
- print "\$a11[0]->[0][2]: " . $a11[0]->[0][2] . "\n";
- print "\nPrint \@a11:\n";
- foreach my $i (@{$a11[0]->[0]}) {
- print " ". $i . "\n";
- }
- print "Print \@a11 done.\n\n";
- my $a12 =[[1 ,2, 3]];
- print "\n\$a12: " . $a12 . "\n";
- print "\$a12->[0]: " . $a12->[0] . "\n";
- print "\@{\$a12->[0]}[0]: " . @{$a12->[0]}[0] . "\n";
- print "\$a12->[0][0]: " . $a12->[0][0] . "\n";
- 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";
- print "\$a12->[0]->[1]: " . $a12->[0][1] . "\n";
- print "\$a12->[0]->[2]: " . $a12->[0][2] . "\n";
- print "\nPrint \$a12:\n";
- foreach my $i (@{$a12->[0]}) {
- print " ". $i . "\n";
- }
- print "Print \@a12 done.\n\n";
- my @a13 =[[[1 ,2, 3]]];
- print "\n\@a13: @a13\n";
- print "\$a13[0]: " . $a13[0] . "\n";
- print "\$a13[0]->[0]: " . $a13[0]->[0] . "\n";
- print "\$a13[0]->[0][0]: " . $a13[0]->[0][0] . "\n";
- print "\$a13[0][0][0]: " . $a13[0][0][0] . "\n";
- print "\@{\$a13[0][0][0]}[0]: " . @{$a13[0][0][0]}[0] . "\n";
- print "\$a13[0][0][0]->[0]: " . $a13[0][0][0]->[0] . "\n";
- print "\$a13[0][0][0]->[1]: " . $a13[0][0][0]->[1] . "\n";
- print "\$a13[0][0][0]->[2]: " . $a13[0][0][0]->[2] . "\n";
- print "\nPrint \@a13:\n";
- foreach my $i (@{$a13[0]->[0][0]}) {
- print " ". $i . "\n";
- }
- print "Print \@a13 done.\n\n";
- my $a14 =[[[1 ,2, 3]]];
- print "\n\@a14: " . $a14 . "\n";
- print "\$a14->[0]: " . $a14->[0] . "\n";
- print "\$a14->[0]->[0]: " . $a14->[0]->[0] . "\n";
- print "\$a14->[0]->[0]->[0]: " . $a14->[0]->[0]->[0] . "\n";
- print "\@{\$a14->[0][0]}[0]: " . @{$a14->[0][0]}[0] . "\n";
- print "\@{\$a14->[0][0]}[1]: " . @{$a14->[0][0]}[1] . "\n";
- print "\@{\$a14->[0][0]}[2]: " . @{$a14->[0][0]}[2] . "\n";
- #print "\@{\$a14->[0][0]}->[0]: " . @{$a14->[0][0]}->[0] . "\n"; # Warning: use an array as a ref is deprecated.
- #print "\@{\$a14->[0][0]}->[1]: " . @{$a14->[0][0]}->[1] . "\n";
- #print "\@{\$a14->[0][0]}->[2]: " . @{$a14->[0][0]}->[2] . "\n";
- print "\@{\$a14->[0]}[0]->[0]: " . @{$a14->[0]}[0]->[0] . "\n";
- print "\@{\$a14->[0]}[0]->[1]: " . @{$a14->[0]}[0]->[1] . "\n";
- print "\@{\$a14->[0]}[0]->[2]: " . @{$a14->[0]}[0]->[2] . "\n";
- print "\$a14->[0]->[0][0]: " . $a14->[0]->[0][0] . "\n";
- print "\$a14->[0]->[0][1]: " . $a14->[0]->[0][1] . "\n";
- print "\$a14->[0]->[0][2]: " . $a14->[0]->[0][2] . "\n";
- print "\nPrint \@a14:\n";
- foreach my $i (@{$a14->[0][0]}) {
- print " ". $i . "\n";
- }
- print "Print \@a13 done.\n\n";
- my $t2 = "sub string";
- print qq(This is $t2) . "\n";
- # Print anonymouse array, output: Thisis$t
- # print "Bad use: qw(This is $t2) [" . qw(This is $t2) . "]\n";
- #------------------------------------------------------------------------------
- # Array, two-dimensional
- #------------------------------------------------------------------------------
- my @aa01 = ([1,2,3], [4,5,6]);
- print "\@aa01: " . @aa01 . "\n";
- print "\$aa01[0]: " . $aa01[0] . "\n";
- print "\$aa01[0][0]: " . $aa01[0][0] . "\n";
- print "Print \@aa01 in one line: @aa01 \n";
- print "Print \@aa01 in for loop: \n";
- print "foreach my \$i (\@aa01)\n";
- foreach my $i (@aa01) {
- print " " . $i . "\n";
- print " in one line: @{$i}\n";
- foreach my $j (@{$i}) {
- print " " . $j . "\n";
- }
- }
- print "Print \@aa01 in for loop done.\n\n";
- # Summary Print
- my $summary = <<END;
- #------------------------------------------------------------------------------
- # Summary: Array
- #------------------------------------------------------------------------------
- F: my \@a1=(array_01 array_02 array_03);
- F: my \@a2=(array_01, array_02, array_03);
- T: my \@a3=(1, 2, 3);
- T: my \@a4=("array_01","array_02","array_03");
- T: my \@a5=qw/array_01 array_02 array_03/;
- B: my \@a6=qw/\$t array_02 array_03/; # \@a6[0] is \$t with not replace \$t value.
- B: my \@a7=qq/array_01 array_02 array_03/; # \@a7[0] is "array_01 array_02 array_03" now.
- B: my \@a8 = qq/\$t1 array_02 array_03/; # Ditto.
- B: my \@a9 = [1 ,2, 3]; # You made a array ref to \@a9 (same as \$a9[0]).
- # You should use \$a9[0]->[0] to use 1, etc.
- # You should iterate like this in foreach: foreach my \$i (\@{\$a9[0]}) {
- T: my \$a10 = [1 ,2, 3]; # As I see, best practise is that you'd better use scalar as a ref always.
- B: my \@a11 = [[1 ,2, 3]];
- T: my \$a11 = [[1 ,2, 3]]; # Ditto.
- B: my \@a11 = [[[1 ,2, 3]]];
- T: my \$a11 = [[[1 ,2, 3]]]; # Ditto.
- T: print qq(This is \$t) . "\\n";
- B: print qw(This is \$t) . "\\n"; # Output is: Thisis\$t
- #------------------------------------------------------------------------------\n\n
- END
- print $summary;
复制代码 |
|