Perl 简明教程
Perl - Variables
变量是存储值的保留内存位置。这意味着当你创建一个变量时,你就预留了一些内存空间。
基于变量的数据类型,解释器分配内存并决定存储在保留内存中的内容。因此,通过将不同的数据类型分配给变量,你可以在这些变量中存储整数、小数或字符串。
我们已经了解到 Perl 具有以下三种基本数据类型 −
-
Scalars
-
Arrays
-
Hashes
相应地,我们将在 Perl 中使用三种类型的变量。 scalar 变量将以美元符号 ($) 为前缀,它可以存储数字、字符串或引用。 array 变量将以符号 @ 为前缀,它将存储标量的有序列表。最后, Hash 变量将以符号 % 为前缀,并且将用于存储成对键/值集。
Perl 以单独的命名空间维护每种变量类型。因此,你可以使用相同的名称将一个标量变量、一个数组或一个哈希用于变量,而不必担心冲突。这意味着 $foo 和 @foo 是两个不同的变量。
运算符左边操作数是变量名,= 运算符右边操作数是存储在变量中的值。例如 −
$age = 25; # An integer assignment
$name = "John Paul"; # A string
$salary = 1445.50; # A floating point
这里 25、“John Paul”和 1445.50 分别分配给 $age、$name 和 $salary 变量的值。我们很快将看到如何将值分配给数组和哈希。
Scalar Variables
标量是单个数据单元。该数据可以是整数、浮点数、字符、字符串、段落或整个网页。简单来说它可以是任何东西,但只是一种。
下面是使用标量变量的一个简单示例−
#!/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
Array Variables
数组是存储标量值的已排序列表的变量。数组变量前面有“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
Hash Variables
哈希是一组 key/value 对。哈希变量前面有百分号 (%) 符号。若要引用哈希的单个元素,您需在变量名称后加上用花括号括起来的与该值相关联的“键”。
下面是使用哈希变量的一个简单示例:
#!/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
Variable Context
在 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
在此示例中,@name 是一个数组,它已在两个不同的上下文中使用。首先,我们把它复制到另一个数组中,即列表,因此它返回了所有元素,假设上下文是列表上下文。接下来,我们使用了相同的数组并尝试将此数组存储为标量,因此在这种情况下,它只返回了此数组中的元素数量,假设上下文是标量上下文。下表列出了不同的上下文 −
Sr.No. |
Context & Description |
1 |
Scalar 对标量变量进行赋值,在标量上下文中计算右值。 |
2 |
List 对数组或哈希进行赋值,在列表上下文中计算右值。 |
3 |
Boolean 布尔上下文,即对表达式进行计算以确定它为真还是为假。 |
4 |
Void 此上下文不仅不关心返回值是什么,它甚至不需要返回值。 |
5 |
Interpolative 此上下文只在引号中或与引号类似的事物中发生。 |