Perl 变量
Perl 变量
变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间。
解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型、浮点型、字符串等。
上一章节中我们已经为大家介绍了Perl的三个基本的数据类型:标量、数组、哈希。
标量 $
开始, 如$a $b 是两个标量。
数组 @
开始 , 如 @a @b 是两个数组。
哈希 %
开始 , %a %b 是两个哈希。
Perl 为每个变量类型设置了独立的命令空间,所以不同类型的变量可以使用相同的名称,你不用担心会发生冲突。例如 $foo 和 @foo 是两个不同的变量。
创建变量
变量不需要显式声明类型,在变量赋值后,解释器会自动分配匹配的类型空间。
变量使用等号(=)来赋值。
我们可以在程序中使用 use strict 语句让所有变量需要强制声明类型。
等号左边为变量,右边为值,实例如下:
$age = 25; # 整型
$name = "CodingDict"; # 字符串
$salary = 1445.50; # 浮点数
以上代码中 25, "CodingDict" 和 1445.50 分别赋值给 $age, $name 和 $salary 变量。
接下来我们会看到数组和哈希的使用。
标量变量
标量是一个单一的数据单元。 数据可以是整数,浮点数,字符,字符串,段落等。简单的说它可以是任何东西。以下是标量的简单应用:
实例
#!/usr/bin/perl
$age = 25; # 整型
$name = "CodingDict"; # 字符串
$salary = 1445.50; # 浮点数
print "Age = $age\n";
print "Name = $name\n";
print "Salary = $salary\n";
以上程序执行输出结果为:
Age = 25
Name = CodingDict
Salary = 1445.5
数组变量
数组是用于存储一个有序的标量值的变量。
数组 @ 开始。
要访问数组的变量,可以使用美元符号($)+变量名,并指定下标来访问,实例如下所示:
实例
#!/usr/bin/perl
@ages = (25, 30, 40);
@names = ("google", "CodingDict", "taobao");
print "\$ages[0] = $ages[0]\n";
print "\$ages[1] = $ages[1]\n";
print "\$ages[2] = $ages[2]\n";
print "\$names[0] = $names[0]\n";
print "\$names[1] = $names[1]\n";
print "\$names[2] = $names[2]\n";
以上程序执行输出结果为:
$ages[0] = 25
$ages[1] = 30
$ages[2] = 40
$names[0] = google
$names[1] = CodingDict
$names[2] = taobao
程序中我们在 $ 标记前使用了转义字符 () ,这样才能输出字符 $。
哈希变量
哈希是一个 key/value 对的集合。
哈希 % 开始。
如果要访问哈希值,可以使用 $ + {key} 格式来访问:
实例
#!/usr/bin/perl
%data = ('google', 45, 'CodingDict', 30, 'taobao', 40);
print "\$data{'google'} = $data{'google'}\n";
print "\$data{'CodingDict'} = $data{'CodingDict'}\n";
print "\$data{'taobao'} = $data{'taobao'}\n";
以上程序执行输出结果为:
$data{'google'} = 45
$data{'CodingDict'} = 30
$data{'taobao'} = 40
变量上下文
所谓上下文:指的是表达式所在的位置。
上下文是由等号左边的变量类型决定的,等号左边是标量,则是标量上下文,等号左边是列表,则是列表上下文。
Perl 解释器会根据上下文来决定变量的类型。实例如下:
实例
#!/usr/bin/perl
@names = ('google', 'CodingDict', 'taobao');
@copy = @names; # 复制数组
$size = @names; # 数组赋值给标量,返回数组元素个数
print "名字为 : @copy\n";
print "名字数为 : $size\n";
以上程序执行输出结果为:
名字为 : google CodingDict taobao
名字数为 : 3
代码中 @names 是一个数组,它应用在了两个不同的上下文中。第一个将其复制给另外一个数组,所以它输出了数组的所有元素。第二个我们将数组赋值给一个标量,它返回了数组的元素个数。
以下列出了多种不同的上下文:
序号 | 上下文及描述 |
---|---|
1 | 标量 −
赋值给一个标量变量,在标量上下文的右侧计算 |
2 | 列表 −
赋值给一个数组或哈希,在列表上下文的右侧计算。 |
3 | 布尔 −
布尔上下文是一个简单的表达式计算,查看是否为 true 或 false。 |
4 | Void −
这种上下文不需要关系返回什么值,一般不需要返回值。 |
5 | 插值 −
这种上下文只发生在引号内。 |
本文转自:http://codingdict.com/article/6799
最新文章
- php实现返回上一页的功能
- Openbox中指定目录打开程序
- [转]查看Flash Log输出
- python中列表的操作
- (js有关图片加载问题)dom加载完和onload事件
- Innodb物理存储结构系列1
- XC图片浏览器
- xfire实现webservice客户端之测试关注点
- (转)Windows Server 2008 默认"照片库查看器" 无法打开图片, 只能用画图程序打开
- RabbitMQ基本管理(上)
- Visual Studio 2013 上使用 Github
- Go语言基础知识
- Oracle的表被锁后的恢复
- RTC子系统
- java BIO/NIO/AIO 学习
- 深入了解webpack前,可以了解的小知识点。
- day 02 python 基础
- [转]TopShelf 用法
- Groovy 类名称赋值为变量使用(newInstance &; new)
- 关于Kafka java consumer管理TCP连接的讨论
热门文章
- 第六篇 xpath的用法
- Android SDK中无法安装HAXM installer
- IDEA2017.3.1破解激活
- 微信公众号开发上传图文素材带有卡片小程序报错:errcode=45166,errmsg = invalid content hint
- java中的.java和.class的区别
- js数组中对象去重 (reduce() 方法)
- AnalyticDB for PostgreSQL 6.0 新特性介绍
- 作为互联网流量入口,CDN日志大数据你该怎么玩?
- 关于C++里set_intersection(取集合交集)、set_union(取集合并集)、set_difference(取集合差集)等函数的使用总结
- mave打包spring项目成jar,启动报错:Offending resource: URL [