`
linchao198401
  • 浏览: 6985 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Perl学习笔记-列表和数组

    博客分类:
  • Perl
阅读更多
  1. 列表是标量的有序集。数组是包含列表的变量。
  2. 列表是数据,数组是变量名。
  3. 列表的每个元素都是一个独立的标量值,这些值是有序的。
  4. 一个列表可以包含数字,字符串,undef值,和任意其他不同类型的标量值组合。
  5. 列表可以包含任意数量的元素,从0到填满整个内存。
  6. 数组名字和标量属于完全不同的命名空间,Perl知道哪个是标量哪个是数组。标量是$,数组是@
  7. 下标可以是数字也可以是表达式。下标超出数组的范围不会报错,只会返回undef的值,如果没有把值放入对应的位置的话。
  8. 对于$array[0] = "abc"。这样的列表,最后一个元素的索引为$#array。这里是0。可以用$array[$#array + 1]来对数组的下一个索引进行赋值。
  9. 列表支持反向索引,从-1,-2,-3开始倒数。-1表示列表的最后一个元素。
  10. 可以用括号才创建一个列表,例如(1, 2, 3)  (1, 2.., 99) 范围操作符。
  11. 列表中也可以是变量。 ($a, $b, $c)。
  12. 使用qw(quoted words)可以方便的输入大量需要加引号的数组。例如qw(abc, ded, ddd, ee)。还可以qw{..}, qw!..!。只要前后的符号匹配就可以了。
  13. 列表可以一起赋值,例如 ($fred, $string, $number) = ("abc", "dec", "fdsf");
  14. 使用@来引用数组,也就是对列表数据的整体的引用。@array = qw {abc, ddd, ccc};
  15. 数组只能包含标量值,不能包含数组,不支持数组的嵌套。
  16. @copy = @source; 把一个数组复制到另外一个数组。
  17. 数组可以作为栈来操作。pop和push,$value = pop(@array)或者 $value = pop @array,甚至pop @array。 push(@array, 4)。 push @array, 8。push @array, 1..10 直接加入10个元素。
  18.  pop和push都是操作数组尾的,shift和unshift是操作数组头。
  19. 数组可以被插入字符串中,然后被打印出来。
  20. 对于@array,那么$array[1]引用的是数组的第二个索引的值,${array}[1]引用的确实$array这个标量的值。没有下标引用的时候,使用的标量名字空间的内容。
  21. foreach可以遍历整个数组,每个变量为 foreach $content(@array),是$content。
  22. 如果不指定变量的名字,也可以使用默认的匿名变量。 foreach (1..10) { $_ },也可以$_ = "abc"; print;就是不带参数的时候会去找默认的全局共享的变量。
  23. reverse可以把数组的内容反转。@reversedResult = reverse @source;
  24. sort将数组的内容按照字符的顺序排序,然后输出新的数组。对数字的排序也会当成字符来处理的。@sortedResult = sort @source;
  25. 上下文,上下文分为标量和列表的。$number = 42 + @people; 上面会使用标量的上下文,输出的是42假设@people的个数。
  26. List-Producing。@result = reverse qw {abc, abd, dec} 列表上下文 $result = reverse qw {abc, adb, dec} 标量上下文 。所以需要看返回的内容要作为什么用。List-Producing的意思就是说,值是列表类型,根据不同的赋值对象,表现的方式是不一样的。
  27. Scalar-Producing。值是标量类型。如果赋值给列表,那么就是只有一个元素的列表。
  28. 可以强制转换为标量的上下文。就是结果是标量。例如 print "@people" 是打印出@people里面的所有的值,以及 print "scalar @people"是打印@people的元素个数。
  29. 如果把<STDIN>保存在列表中,那么就是读取剩下的内容直到遇到EOF。
  30. chomp也可以对列表进行操作,会遍历整个列表,然后对每个列表里面的标量进行修改。

答案:

@strings = <STDIN>;
#chomp(@strings);
@results = sort @strings;
print "-------------Result------------\n";
print @results;

#@names = qw {fred, betty, barney, dino, Wilma, pebbles, bamm-bamm};
#@numbers = <STDIN>;
#chomp(@numbers);
#print "-------------Result------------\n";
#for $number(@numbers) {
    #print "The name of number:" . $number . " is " . $names[$number-1] . "\n";
#}

 

#@array = <STDIN>;
#@array = reverse @array;
#print "-------------Result------------\n";
#print @array;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics