列表与数组 Perl入门第三章

╄→尐↘猪︶ㄣ 提交于 2020-03-07 20:22:42

列表List 是标量的有序集合。数组array则是存储列表的变量。数组/列表的每个元素element都是单独的标量变量,拥有独立的标量值。

1. 

数组:

 访问数组中的元素: $fred[0]="yaya";$fred[1]="yaya1";$fred[2]="yaya"  ...  $fred[99]=“last"

 特殊的数组索引:$#fred  fred数组最后一个索引值;  fred[$#fred] ="last"

                           $fred[-1] ="last"       

 

2.                 

列表:

 列表直接量:

                     (1..5)     #(1 ,2. 3, 4, 5)

                     ($m..$n)  #m n 之间的部分

                    (0, $#fred)  #0 ~ 99

qw简写 # quoted word 加上单引号的单词,当作单引号内的字符串来处理。不能像双引号一样使用\n 和 $fred 替换。空白符(空格,制表符,换行符)会被抛弃。

                   qw( a b c)

                   qw# a b c#

                   qw! a b c !

列表的赋值:

               列表值赋给变量   ($a , $b , $c)=("m" , "n" , "t")
               变量值交换   ($a ,$b)=($b ,$a)

                 (fred[0] , fred[1], fred[2], fred[3]) = qw/a b c d/

                  @fred=qw/a b c d/

                  @stuff =(@fred , undef , @fred)  # 9个元素

                  @copy = @stuff

pop and push  # 处理尾端

                  $k =pop(@fred)  # $k=d

                  $s = pop(@fred)  #$s=c

                 push(@fred,9)  # a b 9

                 push(@fred,4)# a b 9 4

 

shift and unshift  #处理开头

                   $o = shift(@fred)  #  $o = a

                    $c = shift(@fred) # $c = b

                   shift @fred

                   shift @fred   #变空

                   $k=shift  @fred   #$k=undef

 

       unshift(@fred, 1)  # @fred 有一个元素 1

       unshift @fred,2  #@fred 有元素 1 和 2

 

splice 添加/移除数组中间元素。4个参数,第一个为目标数组,第二个操作开始位置,第三个操作长度,第四个参数为要替换的列表。

@fred = qw/ a b c d/

@remove = splice @fred,1,2,qw/ t /   #@remove = qw/b c/   ; @fred = qw/ a t d/

 

@fred = qw/ a b c d/

@remove = splice @fred,1   #  结果@remove = qw /b c d/  @fred = qw/ a /

 

@fred = qw/ a b c d/

@remove = splice @fred,1 ,2  # 结果@remove  = qw / b c/  @fred = qw/ a d/

 

3. foreach

控制变量不是列表的复制品,它是列表元素本身,改变这个值即改变列表

循环结束后,控制变量的值会自动还原。变为循环之前的值。不用担心有变化。

 

foreach $a (qw/ 1 2 3 4/) {

print "$a \n";

}

 

@rock = qw/ 1 2 3 4/

foreach $a  (@rock)  {

print "$a \n”;

}

 

foreach  (1 .. 10)  {   #省略控制变量,perl 使用默认变量$_

print "i can count to $_";

}

4.reverse  #返回次序相反的列表,但不会改变传入的参数。

@fred = 6..10

@fred = reverse @fred;  #10,9,8,7,6

5.sort  按Unicode代码点排序,大写字母在小写字母前面;数字在字母前,标点符号四处散落。非早期的ASCII排序

@number = sort 97..102  #100 101 102 97 98 99

 

6. each 返回2个值,索引和元素值

my @rocks = qw/a b c d e f/

while( my($index ,$value) = each @rocks ) {

say "$index:$value";

}

 

7.标量上下文与列表上下文

同一表达式在不同位置,意义不同。

数字方式操作时得到数字结果;字符串方式操作时得到字符串结果。起决定性作用的是操作符

42 + something  #  something必须为标量

sort something  #something必须为列表

 

 

@p = qw / a b cf/

@list =@p   #得到 qw/a b cf/

$t = @p   #得到3

哪种更有意义就会得到这个返回值.不一定返回元素个数

@b = reverse @p    # qw/cf b a/

$v = reverse @p   # fcba

 

 

$a = something  #标量上下文

@a = something   #列表上下文

($u , $o)=something # 列表上下文

($dia) = something  #列表上下文

 

标量上下文:

$fred = something

$fred[2]=something

123+something

something + 654

if (something) {..}

while ( something) { }

$fred[something] = something

 

列表上下文:

@fred =something

($u , $o)=something # 列表上下文

($dia) = something  #列表上下文

push @fred,something

foreach $fred (something) { ..}

sort something

reverse something

print something

 

陷阱:

@fed = 6*7  #仅有单个元素42的列表

@fred="hello“ . ' ' . "world"

 

@betty = ( )#清空数组

@wilam = undef  #仅有一个未定义的列表

 

scalar 强制指定标量上下文

   scalar @rocks  #石头的种类

 

 

8.

chomp(@lines = <STDIN>);  #读入所有行,去除换行符

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!