列表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>);  #读入所有行,去除换行符

列表与数组 Perl入门第三章的更多相关文章

  1. Docker入门第三章

    配置阿里云镜像加速器 1.首先打开阿里云,搜索容器镜像服务,打开如下 2.配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.j ...

  2. jQuery入门第三

    jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复 ...

  3. Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏 即使是如今,非常多初学游戏开发的同学.在谈到Unity的时候.依旧会觉得Unity仅仅能用于制作3D游戏的. 实际上.Unity在2013 ...

  4. JavaMail入门第三篇 发送邮件

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  5. Android JNI入门第三篇——jni头文件分析

    一. 首先写了java文件: public class HeaderFile { private native void  doVoid(); native int doShort(); native ...

  6. Kotlin入门第三课:数据类型

    前文链接: Kotlin学习第一课:从对比Java开始 Kotlin入门第二课:集合操作 初次尝试用Kotlin实现Android项目 Kotlin的数据类型与Java类似,因此这篇文章主要看Kotl ...

  7. Flask入门第三天

    一.数据库操作 1,orm orm(object-Relation Mapping),对象-关系映射,主要实现模型对象到关系数据库数据的映射. 优点: - 只需要面向对象编程, 不需要面向数据库编写代 ...

  8. java入门第三步之数据库连接

    数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...

  9. Html/Css(新手入门第三篇)

    一.学习心得---参考优秀的网页来学习. 1我们只做的静态网页主要用的技术?html+css 只要网上看到的,他的源代码公开的.[1].先去分析,他们页面是如何布局(结构化)[2].再试着去做一下,- ...

随机推荐

  1. a标签绑定事件

    <a href="javascript:void(0);" onclick="js_method()"></a> 这种方法是很多网站最常 ...

  2. Harvard's CS50

    最近看了哈佛大学David主讲的计算机科学入门,给我一个最大的感受是计算机编程语言真的不重要,重要的是编程者的思想. 1.同一个问题可以就Scratch解决,也可以用C,用Python,用JavaSc ...

  3. OpenShift 4.3环境中创建基于Go的Operator

    详细步骤可以参考官方文档 https://docs.openshift.com/container-platform/4.3/operators/operator_sdk/osdk-getting-s ...

  4. Centos7部署jenkins

    1.       下载rpm包: a)         下载地址:https://pkg.jenkins.io/redhat-stable/ b)         点选一个下载即可,例如点选:“jen ...

  5. C++——二维数组和对象数组

    6.3 二维数组的声明和引用 声明:数据类型 标识符[常量表达式1][常量表达式2]:int a[3][4]; 表示a为整型二维数组,其中第一维有3个下标(0~2),第二维有4个下标(0~3),数组元 ...

  6. python3练习100题——020

    原题链接:http://www.runoob.com/python/python-exercise-example20.html 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下 ...

  7. 解决jmeter 24h长时间压测-o生成报告文件达到几个g以及以上的问题

    问题描述:jmeter执行稳定性测试时,因时间过长,导致jtl文件过大,生成html报告过程报内存溢出错误(增加内存配置也不能解决) 使用 jmeter -n -t    test.jmx   -l  ...

  8. el-popover 点击input框出现table表,可点击选中,可拼音检索完回车选中

    <template> <card> <el-popover placement="right" width="400" trigg ...

  9. js面向对象的程序设计 --- 上篇(理解对象)

    前言 ECMAScript中没有类的概念,因此它们的对象与基于类的语言中的对象有所不同. ECMA-262把对象定义为:"无序的集合属性,其属性可以包含基本值,对象或者函数".正因 ...

  10. STL初探

    关于STL的一些东西 感言: 学C++不学STL函数库的人可能都是... 有点问题 头文件<algorithm>的一些东西 sort,快排: 这是个初学者必需掌握的东西,及其好用,因为方( ...