Perl 简明教程

Perl - Variables

变量是存储值的保留内存位置。这意味着当你创建一个变量时,你就预留了一些内存空间。

基于变量的数据类型,解释器分配内存并决定存储在保留内存中的内容。因此,通过将不同的数据类型分配给变量,你可以在这些变量中存储整数、小数或字符串。

我们已经了解到 Perl 具有以下三种基本数据类型 −

  1. Scalars

  2. Arrays

  3. Hashes

相应地,我们将在 Perl 中使用三种类型的变量。 scalar 变量将以美元符号 ($) 为前缀,它可以存储数字、字符串或引用。 array 变量将以符号 @ 为前缀,它将存储标量的有序列表。最后, Hash 变量将以符号 % 为前缀,并且将用于存储成对键/值集。

Perl 以单独的命名空间维护每种变量类型。因此,你可以使用相同的名称将一个标量变量、一个数组或一个哈希用于变量,而不必担心冲突。这意味着 $foo 和 @foo 是两个不同的变量。

Creating Variables

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 变量的值。我们很快将看到如何将值分配给数组和哈希。

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 此上下文只在引号中或与引号类似的事物中发生。