Username: Password:

perl实例分析教程之十
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  一、数组变量的限制

  在前面讲的数组变量中,能够通过下标访问其中的元素。例如,下列语句访问数组@array的第三个元素:

  $scalar = $array[2];

  虽然数组很有用,但他们有一个显著缺陷,即很难记住哪个元素存贮的什么内容。假如我们来写一个程式计算某文档中首字母大写的单词出现的次数,用数组来实现就比较困难,程式代码如下:

  1 : #!/usr/local/bin/perl

  2 :

  3 : while ($inputline = ) {

  4 : while ($inputline =~ /b[A-Z]S+/g) {

  5 : $word = $&;

  6 : $word =~ s/[;.,:-]$//; # remove punctuation

  7 : for ($count = 1; $count <= @wordlist;

  8 : $count++) {

  9 : $found = 0;

  10: if ($wordlist[$count-1] eq $word) {

  11: $found = 1;

  12: $wordcount[$count-1] += 1;

  13: last;

  14: }

  15: }

  16: if ($found == 0) {

  17: $oldlength = @wordlist;

  18: $wordlist[$oldlength] = $word;

  19: $wordcount[$oldlength] = 1;

  20: }

  21: }

  22: }

  23: print ("Capitalized words and number of occurrences:n");

  24: for ($count = 1; $count <= @wordlist; $count++) {

  25: print ("$wordlist[$count-1]: $wordcount[$count-1]n");

  26: }

  运行结果如下:

  Here is a line of Input.

  This Input contains some Capitalized words.

  ^D

  Capitalized words and number of occurrences:

  Here: 1

  Input: 2

  This: 1

  Capitalized: 1

  这个程式每次从标准输入文档读一行文字,第四行起的循环匹配每行中首字母大写的单词,每找到一个循环一次,赋给简单变量$word。在第六行中去掉标点后,查看该单词是否曾出现过,7~15行中在@wordlist中挨个元素做此检查,假如某个元素和$word相等,@wordcount中相应的元素就增加一个数。假如没有出现过,即@wordlist中没有元素和$word相等,16~20行给@wordlist和@wordcount增加一个新元素。

  二、定义

  正如您所看到的,使用数组元素产生了一些问题。首先,@wordlist中哪个元素对应着哪个单词并不明显;更糟的是,每读进一个新单词,程式必须检查整个列表才能知道该单词是否曾出现过,当列表变得较大时,这是很耗费时间的。

  这些问题产生的原因是数组元素通过数字下标访问,为了解决这类问题,Perl定义了另一种数组,能够用任意简单变量值来访问其元素,这种数组叫做关联数组,也叫哈希表。

  为了区分关联数组变量和普通的数组变量,Perl使用%作为其首字符,而数组变量以@打头。和其他变量名相同,%后的第一个字符必须为字母,后续字符能够为字母、数字或下划线。

  三、访问关联数组的元素

  关联数组的下标能够为任何简单/标量值,访问单个元素时以$符号打头,下标用大括号围起来。例如:

  $fruit{"bananas"}

  $number{3.14159}

  $integer{-7}

  简单变量也可作为下标,如:

  $fruit{$my_fruit}

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅