列表与数组 Perl入门第三章
列表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入门第三章的更多相关文章
- Docker入门第三章
配置阿里云镜像加速器 1.首先打开阿里云,搜索容器镜像服务,打开如下 2.配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.j ...
- jQuery入门第三
jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复 ...
- Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏
Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏 即使是如今,非常多初学游戏开发的同学.在谈到Unity的时候.依旧会觉得Unity仅仅能用于制作3D游戏的. 实际上.Unity在2013 ...
- JavaMail入门第三篇 发送邮件
JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...
- Android JNI入门第三篇——jni头文件分析
一. 首先写了java文件: public class HeaderFile { private native void doVoid(); native int doShort(); native ...
- Kotlin入门第三课:数据类型
前文链接: Kotlin学习第一课:从对比Java开始 Kotlin入门第二课:集合操作 初次尝试用Kotlin实现Android项目 Kotlin的数据类型与Java类似,因此这篇文章主要看Kotl ...
- Flask入门第三天
一.数据库操作 1,orm orm(object-Relation Mapping),对象-关系映射,主要实现模型对象到关系数据库数据的映射. 优点: - 只需要面向对象编程, 不需要面向数据库编写代 ...
- java入门第三步之数据库连接
数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Datab ...
- Html/Css(新手入门第三篇)
一.学习心得---参考优秀的网页来学习. 1我们只做的静态网页主要用的技术?html+css 只要网上看到的,他的源代码公开的.[1].先去分析,他们页面是如何布局(结构化)[2].再试着去做一下,- ...
随机推荐
- 我的翻译--GSMem:通过GSM频率从被物理隔离的计算机上窃取数据
抽象概念 AG网络是指在物理上与公共互联网断开的网络.虽然近几年人们验证了入侵这类网络系统的可行性,但是从这种网络上获取数据仍然是一个有挑战的任务.在本文中,我们介绍GSMem,它是一个可以在蜂窝数据 ...
- C语言移除链表元素
删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4 ...
- 神器扒网站——teleport ultra
在平时的开发或者学习的过程中,我们难免会看到一些让人心动的网站,于是自己想把它搞下来,自己手工一个文件一个文件把它保存下来也可以实现,完成了也累得够呛,有一款扒站的神器,可以把你所喜欢的目标网站整个网 ...
- Linq To Sqlite使用心得
若要使用Linq To Sqlite类库,可以安装Devart Linq Connect Model,如图: 新建这个Model就可以和Linq To Sql一样使用Linq模型,下载地址:https ...
- docker远程访问
查看版本 docker version 查看信息 docker info 修改配置文件 ubuntu在 /etc/default/docker centos在/usr/lib/systemd/syst ...
- 小匠第一周期打卡笔记-Task02
一.文本预处理 预处理通常包括四个步骤: 读入文本 分词 建立字典,将每个词映射到一个唯一的索引(index) 将文本从词的序列转换为索引的序列,方便输入模型 读入文本: import collect ...
- [CF1234F] Yet Another Substring Reverse - 字符串,状压DP
CF1234F Yet Another Substring Reverse Description 给定一个字符串,可以任意翻转一个子串,求最终满足所有字符互不相同的子串的最大长度. 数据范围: \( ...
- ORA-01843: not a valid month
问题描述 ORA-01843: not a valid month oracle数据库插入出现无效的月份
- 手机大厂必备测试技能-GMS 认证
GMS认证背景 在之前的一篇文章有给各位小伙伴们科普过关于GMS的作用,http://www.lemfix.com/topics/266 "墙"内的小伙伴可能很少会用到这样的服务, ...
- (复习)父子组件传值使用v-modal双向绑定,报错Avoid mutating a prop directly解决方案
报错:Avoid mutating a prop directly since the value will be overwritten whenever the parent component. ...