Perl - 变量



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

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

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

  • 标量
  • 数组
  • 哈希

相应地,我们将在 Perl 中使用三种类型的变量。一个标量变量前面会加上一个美元符号 ($),它可以存储数字、字符串或引用。一个数组变量前面会加上符号 @,它将存储标量的有序列表。最后,哈希变量前面会加上符号 %,并将用于存储键/值对的集合。

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

标量

分配给标量变量会以标量上下文计算右侧。

2

列表

分配给数组或哈希会以列表上下文计算右侧。

3

布尔值

布尔上下文仅仅是任何评估表达式以查看其真假的地方。

4

空值

此上下文不仅不关心返回值是什么,甚至也不想要返回值。

5

插值

此上下文仅在引号内或类似引号的东西中发生。

广告