Perl - 变量
变量是用于存储值的保留内存位置。 这意味着当您创建一个变量时,您会在内存中保留一些空间。
解释器根据变量的数据类型分配内存并决定保留内存中可以存储什么。 因此,通过为变量分配不同的数据类型,可以在这些变量中存储整数、小数或字符串。
我们了解到 Perl 有以下三种基本数据类型 −
- 标量
- 数组
- 哈希
因此,我们将在 Perl 中使用三种类型的变量。 scalar 变量前面有一个美元符号 ($),它可以存储数字、字符串或引用。 array 变量前面有符号 @,它将存储标量的有序列表。 最后,Hash 变量将以符号 % 开头,并将用于存储键/值对集。
Perl 在单独的命名空间中维护每个变量类型。 因此,您可以为标量变量、数组或散列使用相同的名称,而不必担心冲突。 这意味着 $foo 和 @foo 是两个不同的变量。
创建变量
Perl 变量不必显式声明以保留内存空间。 当您为变量赋值时,声明会自动发生。 等号 (=) 用于为变量赋值。
请注意,如果我们在程序中使用 use strict 语句,则必须在使用变量之前声明它。
=操作符左边的操作数是变量名,=操作符右边的操作数是存储在变量中的值。 例如 −
$age = 25; # An integer assignment $name = "John Paul"; # A string $salary = 1445.50; # A floating point
这里的 25、"John Paul"和 1445.50 分别是分配给 $age、$name 和 $salary 变量的值。 很快我们将看到如何为数组和散列赋值。
标量变量
标量是单个数据单元。 该数据可能是整数、浮点数、字符、字符串、段落或整个网页。 简单地说它可以是任何东西,但只能是一个东西。
这是一个使用标量变量的简单示例 −
#!/usr/bin/perl $age = 25; # An integer assignment $name = "John Paul"; # A string $salary = 1445.50; # A floating point print "Age = $age\n"; print "Name = $name\n"; print "Salary = $salary\n";
这将产生以下结果 −
Age = 25 Name = John Paul Salary = 1445.5
数组变量
数组是存储标量值的有序列表的变量。 数组变量前面有一个"at"(@)符号。 要引用数组的单个元素,您将使用美元符号 ($) 和变量名称,后跟方括号中的元素索引。
这里是一个使用数组变量的简单例子 −
#!/usr/bin/perl @ages = (25, 30, 40); @names = ("John Paul", "Lisa", "Kumar"); 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";
在这里,我们在 $ 符号之前使用了转义符号 (\) 来打印它。 其他 Perl 会将其理解为变量并打印其值。 执行时,这将产生以下结果 −
$ages[0] = 25 $ages[1] = 30 $ages[2] = 40 $names[0] = John Paul $names[1] = Lisa $names[2] = Kumar
散列变量
哈希是一组键/值对。 哈希变量前面有一个百分号 (%)。 要引用散列的单个元素,您将使用散列变量名称后跟与花括号中的值关联的"键"。
这里是一个使用哈希变量的简单例子 −
#!/usr/bin/perl %data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40); print "\$data{'John Paul'} = $data{'John Paul'}\n"; print "\$data{'Lisa'} = $data{'Lisa'}\n"; print "\$data{'Kumar'} = $data{'Kumar'}\n";
这将产生以下结果 −
$data{'John Paul'} = 45 $data{'Lisa'} = 30 $data{'Kumar'} = 40
变量上下文
Perl 根据上下文(即使用变量的情况)对相同的变量进行不同的处理。 让我们检查以下示例 −
#!/usr/bin/perl @names = ('John Paul', 'Lisa', 'Kumar'); @copy = @names; $size = @names; print "Given names are : @copy\n"; print "Number of names are : $size\n";
这将产生以下结果 −
Given names are : John Paul Lisa Kumar Number of names are : 3
这里 @names 是一个数组,它已在两种不同的上下文中使用。 首先,我们将它复制到任何其他数组中,即列表,因此它返回所有元素,假设上下文是列表上下文。 接下来我们使用相同的数组并尝试将这个数组存储在一个标量中,所以在这种情况下,假设上下文是标量上下文,它只返回这个数组中元素的数量。 下表列出了各种上下文 −
序号 | 上下文与说明 |
---|---|
1 | Scalar 对标量变量的赋值会评估标量上下文中的右侧。 |
2 | List 对数组或哈希的赋值计算列表上下文中的右侧。 |
3 | Boolean 布尔上下文只是评估表达式以查看它是真还是假的任何地方。 |
4 | Void 这个上下文不仅不关心返回值是什么,它甚至不想要返回值。 |
5 | Interpolative 这种上下文只发生在引号内,或者像引号一样起作用的东西。 |