2.2 Perl--列表和数组

列表是标量的有序集合,数组是存储列表的变量。数组或列表中的每个原书都是单独的标量变量,拥有独立的标量值,这些值是有序的,也就说,从开始到终止元素的先后次序是固定的。并且每个元素都有相应的整数作为索引,此数字从0开始递增,每次加1. 还是来案例来理解这一节的东西吧。

1.写入一个程序,读入一些字符串(每行一个,)直到文件结尾位置,然后,再以相反的顺序输出这个列表。

#! /usr/bin/perl
use warnings;
print "please enter your string,then press Ctrl+D:\n";
@lines=;
@a=reverse @lines;
print @a;
  #在列表上下文中,会返回所有剩下的行,知道文件结尾为止,通常可以键入Control+D来告知系统,不会有任何输入了(对于DOS/Windows来说,要用Control+Z)
    reverse操作符会读取列表或数组的值,并按相反的次序返回该列表,这个是对..很好的补充,因为6..10代表6到10,但其中..只表示递增的关系。

2.写一个程序,读入一数字(每行一个),直到文件结尾为止,然后根据每一个俗子输入的如下名单中相应的人名。

#! /usr/bin/perl
use warnings;
print "please enter some numbers from 1 to 7,one per line,then press Ctrl-D:\n";
chomp(@a=);
@b=qw(fred betty barney dino wilma pebbles bamm-bann);
foreach $_ (@a){
   print "$b[$_-1]\n";
    };

#chomp会自动去掉每个元素的换行符

qw表示quoted word,perl会把其当作单引号的内的字符串来处理,所以qw构建的列表中,不能像双引号内的字符一样用\n或$fred.其中的空白符(如空格,制表符,换行符),同时还容许其他任何标点符号作为定界符,只要左右的相同,同时如果你要在被圈引的字符串内使用定界符,还可以通过反斜线转义来引入这个字符。

foreach $_ ()就是一个个的找()内的单个字符串,然后单个的字符串定义为$_,其中$_是默认的,可以不写,后面默认,同时也可以写使用其他的标量变量。

$b[$_-1]表示取数组@b中的第$_个元素。无论是列表还是数组,其索引都是从0开始的,所以数组中对应的第一个对象的索引号为0,对于@a其最大的索引为$#a,注意这个数会比数组元素的个数少1.

还有一个“负数数组索引值”,最后一个元素的索引值为-1,倒数第二个为-2,一次类推。 @b数组名只能包含标量,不能包含其他数组,所以数组无法成为列表里的元素,只能展开生成元素列表。

3.读入一些字符串(每行一个),知道文件结尾为止,然后按ASCII码顺序来输出所有的字符串。

输出的结果在一行

#! /usr/bin/perl
use warnings;
print "please enter some some strings,one per line,then press Ctrl-D:\n";
chomp(@a=);
@b=sort @a;
print "@b\n";
输出的结果在不同的行
#! /usr/bin/perl
use warnings;
print "please enter some some strings,one per line,then press Ctrl-D:\n";
chomp(@a=);
@b=sort @a;
foreach $b(@b) {
      print "$b\n";
            }

#其中sort就是一个排序操作符,规则是大写字符在小写字符前面,数字排在字母前面,标点符号散落各地,但100,99的排序的时候还是100,99,因为根据默认的排序规则,任何以1开头的字符串会被排在以9开头的字符串之前。

ps:

  1. 上面的方法尽管参考,方法肯定不止一个
  2. 如果跟我一样是菜鸟,请结合我的第一篇博客看如何运行这样的脚本。
  3. 博文内容为整理的《Perl语言入门》这本书,感谢这个书的作者Randal L等人的付出
个人公众号,比较懒,很少更新,可以在上面提问题:

更多精彩,请移步公众号阅读:

Sam avatar
About Sam
专注生物信息 专注转化医学