📅  最后修改于: 2020-10-16 05:25:00             🧑  作者: Mango
变量是存储值的保留存储位置。这意味着当您创建变量时,会在内存中保留一些空间。
解释器根据变量的数据类型分配内存,并确定可以在保留内存中存储的内容。因此,通过为变量分配不同的数据类型,可以在这些变量中存储整数,小数或字符串。
我们了解到Perl具有以下三种基本数据类型-
因此,我们将在Perl中使用三种类型的变量。标量变量将以美元符号($)开头,并且可以存储数字,字符串或引用。数组变量将以符号@开头。它将存储标量的有序列表。最后, 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是一个数组,已在两个不同的上下文中使用过。首先,我们将其复制到任何其他数组(即list)中,因此假定上下文是列表上下文,它返回了所有元素。接下来,我们使用相同的数组,并尝试将该数组存储在标量中,因此在这种情况下,假设上下文是标量上下文,它仅返回此数组中的元素数量。下表列出了各种上下文-
Sr.No. | Context & Description |
---|---|
1 |
Scalar Assignment to a scalar variable evaluates the right-hand side in a scalar context. |
2 |
List Assignment to an array or a hash evaluates the right-hand side in a list context. |
3 |
Boolean Boolean context is simply any place where an expression is being evaluated to see whether it’s true or false. |
4 |
Void This context not only doesn’t care what the return value is, it doesn’t even want a return value. |
5 |
Interpolative This context only happens inside quotes, or things that work like quotes. |