Perl 变量:数组变量
Perl 数组
Perl 数组一个是存储标量值的列表变量,变量可以是不同类型。
数组变量以 @ 开头。访问数组元素使用 $ + 变量名称 + [索引值] 格式来读取。
1、创建列表、数组
1.数组变量以 @ 符号开始,元素放在括号内,
2.以 qw 开始定义数组,第二个数组使用 qw// 运算符,它返回字符串列表,数组元素以空格分隔。
@array1 = (1, 2, 'Hello'); 列表
@array2 = [1, 2, 'Hello']; 数组
@array3 = qw/this is a array/;
print @array1[0]; #1
print @array1; #12hello
print @array2[0]; #1
print @array2; #ARRAY(0x26e3160)
2、访问数组元素
访问数组元素使用 $ + 变量名称 + [索引值] 格式来读取。
数组索引值
从正向开始读取, 0 开始,即 0 为第一个元素,1 为第二个元素,以此类推。
负数从反向开始读取, -1开始,即 -1 为第一个元素, -2 为第二个元素 。
3、列表、数组序列号
Perl 提供了可以按序列输出的数组形式,格式为 (起始值 .. 结束值)。
#!/usr/bin/perl @var1_10 = (..); @var2_10 = [..]; print @var1_10 # print @var2_10 #ARRAY(0x26e3160)
4、数组大小
数组大小由数组中的标量上下文决定。
。。。。。。
5、添加和删除数组函数
Perl 提供了一些有用的函数来添加和删除数组元素。
| 序号 | 类型和描述 |
|---|---|
| 1 | push @ARRAY, LIST
将列表的值放到数组的末尾 |
| 2 | pop @ARRAY
弹出数组最后一个值,并返回它 |
| 3 | shift @ARRAY
弹出数组第一个值,并返回它。数组的索引值也依次减一。 |
| 4 | unshift @ARRAY, LIST
将列表放在数组前面,并返回新数组的元素个数。 |
6、切割数组
我们可以切割一个数组,并返回切割后的新数组:
实例
#!/usr/bin/perl @sites = qw/ /; @sites2 = @sites[,,]; @sites3 = @sites[..]; print print
7、替换数组元素
Perl 中数组元素替换使用 splice() 函数,语法格式如下:
splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]
参数说明:
@ARRAY:要替换的数组。
OFFSET:起始位置。
LENGTH:替换的元素个数。
LIST:替换元素列表。
以下实例从第6个元素开始替换数组中的5个元素: 实例 #!/usr/bin/perl @nums = (..); print "替换前: @nums\n"; splice(@nums, , , ..); print "替换后: @nums\n"; 执行以上程序,输出结果为: 替换前: 替换后:
8、将字符串转换为数组
Perl 中将字符串转换为数组使用 split() 函数,语法格式如下:
split [ PATTERN [ , EXPR [ , LIMIT ] ] ]
参数说明:
PATTERN:分隔符,默认为空格。
EXPR:指定字符串数。
LIMIT:如果指定该参数,则返回该数组的元素个数。
示例:
#!/usr/bin/perl
# 定义字符串
$var_1 = "hello";
$var_2 = "hello-welcome-world";
$var_3 = "hello,welcome,world,goodbye";
# 字符串转为数组
@var_1 = split('', $var_1);
@var_2 = split('-', $var_2);
@var_3 = split(',', $var_3);
print "$var_1[1]\n"; # 输出 e
print "$var_2[1]\n"; # 输出 welcome
print "$var_3[1]\n"; # 输出 welcome
9、将数组转换为字符串
Perl 中将数组转换为字符串使用 join() 函数,语法格式如下:
join EXPR, LIST
参数说明:
EXPR:连接符。
LIST:列表或数组。
实例
#!/usr/bin/perl
# 定义字符串
$var_1 = "hello-welcome-world";
$var_2 = "hello,welcome,world,goodbye";
# 字符串转为数组
@var_1 = split('-', $var_1);
@var_2 = split(',', $var_2);
# 数组转为字符串
$var_1 = join( '-', @var_1 );
$var_2 = join( ',', @var_2 );
print "$var_1\n";
print "$var_2\n";
10、数组排序
Perl 中数组排序使用 sort() 函数,语法格式如下:
sort [ SUBROUTINE ] LIST
参数说明:
SUBROUTINE:指定规则。
LIST:列表或数组。
实例 #!/usr/bin/perl # 定义数组 @sites = qw(hello world say goodbye); print "排序前: @sites\n"; # 对数组进行排序 @sites = sort(@sites); print "排序后: @sites\n"; 执行以上程序,输出结果为: 排序前: hello world say goodbye 排序后: hello goodbye say world
11、合并数组
数组的元素是以逗号来分割,我们也可以使用逗号来合并数组,如下所示:
实例 #!/usr/bin/perl @numbers = (,,(,,)); print
也可以在数组中嵌入多个数组,并合并到主数组中:
实例 #!/usr/bin/perl @odd = (,,); @even = (, , ); @numbers = (@odd, @even); print
12、从列表中选择元素
一个列表可以当作一个数组使用,在列表后指定索引值可以读取指定的元素,如下所示:
实例 #!/usr/bin/perl $,,,,)[]; print
Perl 变量:数组变量的更多相关文章
- Perl关联数组用法集锦
本文和大家重点讨论一下Perl关联数组的概念,创建Perl关联数组,从数组变量复制到Perl关联数组,元素的增删,用Perl关联数组循环等内容,相信通过本文的学习你对Perl关联数组的用法一定会有深刻 ...
- perl访问数组中变量
数组一个是存储标量值的无序列表变量. 数组变量以 @ 开头.访问数组元素使用 $ + 变量名称 + [索引值] 格式来读取,实例如下: #!/usr/bin/perl @names = (" ...
- Perl 变量:标量变量、数组变量、哈希变量和变量上下文
一.Perl 变量变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间.解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型.浮点型.字符串等.上一章 ...
- perl 数组变量(Array) 转载
Perl 变量(2)--数组 原文地址:Perl 变量(2)--数组 作者:飞鸿无痕 二.数组 数组是标量数据的有序列表. 数组可以含任意多个元素.最小的数组可以不含元素,而最大的数组可以占满全部可用 ...
- Perl常用特殊变量
perl 内置变量 $- 当前页可打印的行数,属于Perl格式系统的一部分 $! 根据上下文内容返回错误号或者错误串 $” 列表分隔符 $# 打印数字时默认的数字输出格式 $$ Perl解释器的进程I ...
- perl5 第四章 列表和数组变量
第四章 列表和数组变量 by flamephoenix 一.列表二.数组--列表的存贮 1.数组的存取 2.字符串中的方括号和变量替换 3.列表范围 4.数组的输出 5.列表/数组的长度 ...
- 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量
多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量,并且数组变量可以直接取到每一个元素var array1 = '<%=yearList =>'; ...
- $_REQUEST变量数组header()函数
$_SERVER 包含http信息头,路径和服务器端的一些信息,没发送一次HTTP请求,就会创建一个$_SERVER数组Array ( [HTTP_HOST] => localhost [HTT ...
- block中无法使用C数组变量
在Objective-C的block中无法使用C数组,即使我们不对C数组做任何改变,编译的时候也会报错: #include <stdio.h> int main() { const cha ...
随机推荐
- python: find the index of a given value in a list
["foo", "bar", "baz"].index("bar")
- python模块--如何相互调用自己写的模块
一.模块相互调用同级目录调用时的两种方法 import module print(module.add(3,8)) from module import add print(add(2,4)) 同级目 ...
- 一款直接时空处理分析的开源数据库---geomesa
一款直接时空处理分析的开源数据库---geomesa,可用于交通轨迹数据存储分析等相关领域, 在分布式列数据库的基础上进行扩展,目前支持Accumulo, HBase, Cassandra, and ...
- 关于1024:堆栈下溢的错误(1024. Stack Underflow Occurred)
http://blog.163.com/sylar_lin/blog/static/192332093201111242412487/ 今天碰到个很奇怪的问题,注释掉下面的trace,realse版本 ...
- Android JNI中的数据传递
1.JNI 基本类型 当 Java 代码与本地代码 C/C++ 代码相互调用时,肯定会有参数的传递.两者属于不同的语言,数据类型有差别,此时,JNI 要保证两种语言之间的数据类型和数据空间大小的匹配. ...
- 记一次socket_create()函数耗时异常记录
背景: 下午开发时突然整个页面耗时增加,空接口每次都需要2-3秒的耗时,一开始以为连开发环境数据库出现问题,最后断开数据库跑,发现还是很慢 最终逐步调试此页面耗时,定位到了socket_create( ...
- 关于python urlopen 一个类似radio流的timeout方法
终极解决方法来啦!看代码感受: import requests import eventlet import time eventlet.monkey_patch() try: with eventl ...
- JVM内存管理之GC算法精解(五分钟让你彻底明白标记/清除算法)
相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...
- buntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题
android-ndk-r8d/build/core/build-binary.mk:41: *** target file `clean' has both : and :: entries. ...
- ROS HTB限速失败原因分析和需注意事项
要想做限速,必须要知道以下几点: 首先要知道自己要限制什么的速度,谁的速度,于是需要用的标记,即Mangle. 其次要知道怎么限速,是限制上传,还是下载? 最后要知道所做的限速是否成功,即需要知道如何 ...