统计排行 道具中心
  • 5935阅读
  • 2回复

--CGI编程--Perl中数组的使用--

楼层直达
级别: *
发帖
*
欢乐豆
*
威望
*
交易币
*
论坛币
16
数组是perl里面一种非常有用的东西。我们可以通过下面的方式定义数组: lr>NG,N  
d-~V.  
   @a=("hello","great","cipher"); ^L2d%d\5  
   @b=(1,2,3,4,5,6,7); n= <c_a)Nb  
1jg* DQ7L  
  @b的定义方式还可以写成下面的形式: YcobK#c  
$ ZI ]  
   @b=(1..7); #这种方式对于需要1到10000的初始值得数组真实太重要了。    ;W?#l$R  
   @b=("a".."z"); {^dq7!  
kg^0%-F  
  也是可以的,但是我想不出来对中国人有什么用。定义一个空数组可以用下面的方式: G+<XYkz*  
a yoC]rE  
   @c=(); Ku ,wI86  
>N|?>M*  
  访问数组通过下面的方式(下标和c语言一模一样,从0开始,basic的用户要注意了): d0 )725Ia  
sG u.G  
   $b[0]=10000; C1D:Xi-  
B5z'Tq1  
  注意这里引导符变成了$不是@。通过这个变化表示这时正在访问一个单独的数据。而不是一组数据。还可以使用多个下标,但是这时就要使用@引导符了。例如: w.x&3aG  
=VD],R)  
   @b[5,7,9]=(45,56,67); }%u #TwZ  
qk<jvha  
  这种情况下,print $b[8];将会在使用了perl -w得到一个使用未定义变量的错误,其他情况下什么都不会发生。 EQ$k^Y8 "  
Am F[#)90P  
  数组之间相互拷贝,可以用下面的方式: r%=-maPL[  
&gp&i?%X9b  
   @d=@c;  V;%ug'j  
Xq;|l?,O  
  这样要比c语言简单多了。同c语言不同,perl的数组是可以动态改变大小的。因此我们可以追加,删除数组内的元素。追加一个元素可以使用这种方式: c7XBZ%D  
N#ggT9>X  
   @c=(@c,"hello"); |P>7C  
;?/5Mr  
  perl里面有一个专门的函数用来惊醒追加操作叫做push,push的使用方法如下: sE[`x^1'8  
eNd&47lJ  
   push(@c,"hello"); G<7M;vRvP  
   push(@c,("hello","halloha")); V?M (exN  
   push(@c,@a); R/oi6EKv  
X84T F~2Y  
  这里可以看到,可以给数组追加一个元素,一组元素甚至另外一个数组。另外,在perl的数组中可以放不同类型的标量。这一点在c程序员的眼中可能有点怪异,但是如 果记住perl里面的一切都是引用就可以了。或者理解成这是一个void类型的指针的数组。有了push,就一定有pop。pop就是从数组的最后取出一个元素。用法为: 2=_$&oT**  
%V>%AP  
   pop(@a); N9!L8BBaK  
relt7sK  
  既然可以从数组的末尾加入元素,那么一定也可以从数组的开头加入元素。那么这个功能是由unshift函数提供的。用法为: )h}IZSm  
Y1h)aQ5{  
   unshift(@c,"hello"); MDlH[PJ@i  
   unshift(@c,("hello","halloha")); C-y MWr  
   unshift(@c,@a); @5^&&4>N  
Rn?JMM]  
  有了unshif就一定会有shift了。shift的功能是从数组的开头取出一个元素。用法为: iN&oSpQ  
^sf,mM~D  
   unshift( @a); S~3|1Hw*tN  
?y? 9;;  
  有了操作数组两端的函数那么一定也会有操作数组中间部分的函数,这个函数就是splice,splice函数有三个作用。第一个作用是向数组中间的一部分插入内容。例如:  tKV,  
D&):2F^9.  
   @d=(1..9); Z[nHo'  
   my @e=("a".."f"); -Rpra0o. C  
   splice(@d,2,2,@e); [OCjYC`  
`E$vWZq}  
  将会得到12abcdef56789,注意这里是从第二个开始插入,不是从下标为2的元素开始插入的。splice的第二个功能是删除,例如在刚才的代码上面再加上: 86=W}eV1r  
%&6Q Uv^  
   splice(@d,2,6); MDF_Xr-hZ  
2K9X (th1  
  将可以得到1256789;splice的第三个功能就是删除到末尾。语法为: bny5e:= d  
%>&ex0j]  
   splice(@d,2); B $g\;$G  
4:/V|E\D  
  就是从第二个开始,删除到末尾。我们还应该有一个可以把整个数组合并成一个标量的函数。这个函数就是join,join有两个参数,第一个参数是合并时放在元素之间的分割符,第二个是进行操作的数组。 例如: ;}E}N:A  
{IgH0+z  
   my @g=(1,2,3); r &.~ {  
   join(" ",@g); 0OM^,5%8  
zcP=+Y)YA  
  将可以得到“1 2 3”,还有三个函数我们昨天已经见过了,就是undef,chop和chomp。undef(@a); 的作用是把@a的内容清空。chop(@a); 的作用是把数组内每个元素的末尾去一个字符。而chomp(@a); 的作用则是把数组内的每一个元素的末尾的换行符去掉。我们还应该介绍一个函数就是scalar,这个函数取得数组的长度。例如: IB;yL/T  
ye.6tlW  
   my @h=(1,2,3); v^JzbO~|gj  
   scalar(@h); on 7 n4  
Onq^|r's&  
  将可以得到3。但是我们经常不这么用,因为在将数组向标量转换时就会返回数组的长度,例如下面的操作就可以。 RHFRN&RU$  
8_}t,BC  
   my @i=(1,2,3,4); KVOV<uDCj  
   print @i."\n"; `0qjaC  
(}39f  
  将会打印出4。 好了,今天就到这里吧,最后是一个概括了今天大部分内容的程序。我写的。中间会输出很多错误信息。呵呵。 2jyWkAP'  
1L!;lP2  
   #!/user/bin/perl -w ><}nZ7  
   use strict; :xr^E]  
   { $|=" "; _[R(9KyF0f  
   my @a; AJ}FHym_ZQ  
   @a=(1,2,3); q5_zsUR=  
   @a[4,6]=(23,34); ,,u hEoH  
   #print $a[5]; (?Mn_FNE|  
   #quoted because it would cause error R$awo/'^  
   my @b; )YAa7\Od  
   @b=("because","haul"); G*4I;'6  
   push(@b,"grand"); VZt%cq  
   print @b; U,W MP<5&  
   print "\n"; l6bY!I>  
   push(@b,("puppy","kitty")); _]zX W  
   print @b; Z;G*wM"  
   print "\n"; h}a}HabA  
   push(@b,@a); @/ ^< 9  
   print @b; 59zWB,y(P  
   print "\n"; W^8  
   push(@a,@b); >UCg3uFj  
   print @a; %e]G]B%  
   print "\n"; P*!`AWn  
   my @c; .T3N"}7[  
   @c=(1,2,3,"hello");  :f[ w  
   print @c; v)Y)tu>  
   print "\n"; .jD!+wv{9  
   pop(@a); , @jtD*c)  
   print @a; _\4#I(  
   print "\n"; b@CjnAZ  
   my @d; D;P=\i>9-  
   @d=(1..9); uaO.7QSwN  
   print @d; '! ^7 *@z  
   print "\n"; inU5eronuj  
   my @e=("a".."f"); }W'j Dz7O  
   splice(@d,2,2,@e); ]t)N3n6Bc  
   print @d; c ?CD;Pk  
   print "\n"; =Smd/'`_  
   splice(@d,2,6); Q$ew.h  
   print @d; c~tl0XU1  
   print "\n"; &j:e<{@  
   } Kn->R9Tl  
9;LjM ~Ct  
  嘻嘻,程序很长,不过试着运行一下,全是上面所讲的内容的应用,加深一下你的印象吗。 +r!NR?^m  
发帖
36
欢乐豆
5
威望
4
交易币
0
论坛币
0
只看该作者 沙发  发表于: 09-06
好帖,确实好帖!
快速回复

限100 字节
请尊重发贴者,不要灌水,回复每贴0.2威望。
 
验证问题:
上一个 下一个