Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2646357
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类:

2008-01-18 16:12:57

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

  数组是perl里面一种非常有用的东西。我们可以通过下面的方式定义数组:

   @a=("hello","great","cipher");
   @b=(1,2,3,4,5,6,7);

  @b的定义方式还可以写成下面的形式:

   @b=(1..7); #这种方式对于需要1到10000的初始值得数组真实太重要了。   
   @b=("a".."z");

  也是可以的,但是我想不出来对中国人有什么用。定义一个空数组可以用下面的方式:

   @c=();

  访问数组通过下面的方式(下标和c语言一模一样,从0开始,basic的用户要注意了):

   $b[0]=10000;

  注意这里引导符变成了$不是@。通过这个变化表示这时正在访问一个单独的数据。而不是一组数据。还可以使用多个下标,但是这时就要使用@引导符了。例如:

   @b[5,7,9]=(45,56,67);

  这种情况下,print $b[8];将会在使用了perl -w得到一个使用未定义变量的错误,其他情况下什么都不会发生。

  数组之间相互拷贝,可以用下面的方式:

   @d=@c;

  这样要比c语言简单多了。同c语言不同,perl的数组是可以动态改变大小的。因此我们可以追加,删除数组内的元素。追加一个元素可以使用这种方式:

   @c=(@c,"hello");

  perl里面有一个专门的函数用来惊醒追加操作叫做push,push的使用方法如下:

   push(@c,"hello");
   push(@c,("hello","halloha"));
   push(@c,@a);

  这里可以看到,可以给数组追加一个元素,一组元素甚至另外一个数组。另外,在perl的数组中可以放不同类型的标量。这一点在c程序员的眼中可能有点怪异,但是如 果记住perl里面的一切都是引用就可以了。或者理解成这是一个void类型的指针的数组。有了push,就一定有pop。pop就是从数组的最后取出一个元素。用法为:

   pop(@a);

  既然可以从数组的末尾加入元素,那么一定也可以从数组的开头加入元素。那么这个功能是由unshift函数提供的。用法为:

   unshift(@c,"hello");
   unshift(@c,("hello","halloha"));
   unshift(@c,@a);

  有了unshif就一定会有shift了。shift的功能是从数组的开头取出一个元素。用法为:

   unshift( @a);

  有了操作数组两端的函数那么一定也会有操作数组中间部分的函数,这个函数就是splice,splice函数有三个作用。第一个作用是向数组中间的一部分插入内容。例如:

   @d=(1..9);
   my @e=("a".."f");
   splice(@d,2,2,@e);

  将会得到12abcdef56789,注意这里是从第二个开始插入,不是从下标为2的元素开始插入的。splice的第二个功能是删除,例如在刚才的代码上面再加上:

   splice(@d,2,6);

  将可以得到1256789;splice的第三个功能就是删除到末尾。语法为:

   splice(@d,2);

  就是从第二个开始,删除到末尾。我们还应该有一个可以把整个数组合并成一个标量的函数。这个函数就是join,join有两个参数,第一个参数是合并时放在元素之间的分割符,第二个是进行操作的数组。 例如:

   my @g=(1,2,3);
   join(" ",@g);

  将可以得到“1 2 3”,还有三个函数我们昨天已经见过了,就是undef,chop和chomp。undef(@a); 的作用是把@a的内容清空。chop(@a); 的作用是把数组内每个元素的末尾去一个字符。而chomp(@a); 的作用则是把数组内的每一个元素的末尾的换行符去掉。我们还应该介绍一个函数就是scalar,这个函数取得数组的长度。例如:

   my @h=(1,2,3);
   scalar(@h);

  将可以得到3。但是我们经常不这么用,因为在将数组向标量转换时就会返回数组的长度,例如下面的操作就可以。

   my @i=(1,2,3,4);
   print @i."\n";

  将会打印出4。 好了,今天就到这里吧,最后是一个概括了今天大部分内容的程序。我写的。中间会输出很多错误信息。呵呵。

   #!/user/bin/perl -w
   use strict;
   { $|=" ";
   my @a;
   @a=(1,2,3);
   @a[4,6]=(23,34);
   #print $a[5];
   #quoted because it would cause error
   my @b;
   @b=("because","haul");
   push(@b,"grand");
   print @b;
   print "\n";
   push(@b,("puppy","kitty"));
   print @b;
   print "\n";
   push(@b,@a);
   print @b;
   print "\n";
   push(@a,@b);
   print @a;
   print "\n";
   my @c;
   @c=(1,2,3,"hello");
   print @c;
   print "\n";
   pop(@a);
   print @a;
   print "\n";
   my @d;
   @d=(1..9);
   print @d;
   print "\n";
   my @e=("a".."f");
   splice(@d,2,2,@e);
   print @d;
   print "\n";
   splice(@d,2,6);
   print @d;
   print "\n";
   }

阅读(2306) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~