Perl 变量

现在,我们将讨论变量。你可以将变量视为包含一个或多个值的容器类型。一旦定义,变量的名称保持不变,但其值可以变化。

Perl 有 3 种变量,最简单的是标量,这是我们今天的主题

标量变量

这种类型的变量包含单个值。

它的名字以美元符号和 Perl 标识符开头(它是我们变量的名称)。

$variable_name

命名惯例

如果你熟悉其他编程语言,那么你会知道有关命名变量的某些规则。同样,Perl 有三个命名标量的规则。

  1. 所有标量名称都以 $ 开头。很容易记住每个名字前缀为 $。把它想象成一个 $scalar
  2. 同 PHP 类似,在第一个字符 $ 之后,它在 Perl 中是特殊的,允许使用字母数字字符,即 a 到 z,A 到 Z 和 0 到 9,也允许使用下划线。使用下划线将变量名称拆分为两个单词。变量名的第一个字符不能是数字
  3. 尽管数字可以成为名称的一部分,但它们不能在 $ 之后立即出现。这意味着 $ 之后的第一个字符将是字母或下划线。熟悉 C/C++语言的人应该能够立即识别出相似性。比如,
$var;

$Var32;

$vaRRR43;

$name_underscore_23;

但是,下面这些不是合法的标量变量名称,

mohohoh                     # $ character is missing 

$                           # must be at least one letter 

$47x                       # second character must be a letter

$variable!                  # you can't have a ! in a variable name

一般规则说,当 Perl 只有一个数值时,那就是标量。可以从设备中读取标量,我们可以将它用于我们的程序。

两种标量数据类型

1.数字 2.字符串

数字:

在这种类型的标量数据中,我们可以指定:

   - 整数,只是它的整数,如 2,0,534    - 浮点数,它是实数,如 3.14,6.74,0.333

注意:通常,Perl 解释器会看到像浮点数这样的整数。例如,如果你在程序中写 2,Perl 会看到它像 2.0000

整数文字:

它由一个或多个数字组成,可选地前面加上或减去并包含下划线。

Perl 示例:

0;

-2542;

4865415484645          #this also can be written with underscores (for clarity) : 4_865_415_484_645

你可以看到 - 没什么特别的。但请相信我,这是最常见的标量类型。他们到处都是。

浮点文字:

它由数字组成、可选择减号、小数点和指数。

Perl 示例:

3.14;

255.000;

3.6e20;                                  # it's 3.6 times 10 to the 20th

-3.6e20;                                 # same as above, but negative

-3.6e-20;                                #it's negative 3.6 times 10 to the -20th

-3.6E-20;                                #we also can use E – this means the same the lowercase version -3.6e-20

![PERL 初学者教程 - 完整指南](/img/Tutorial/Perl/Perl Variable.png)

八进制,十六进制和二进制表示:

它是十进制系统的替代品。请允许我向你显示八进制,十六进制和二进制表示。一个简短的表格提供了有关这种奇怪风格的所有重要信息:

进制 前缀
八进制 8 0
十六进制 16 0x
二进制 2 0b

Perl 示例:

255;                               # 255 in decimal notation

0377;                                   # 255 in octal notation

0xff;                                   # 255 in hexadecimal notation

0b11111111;                             # 255 in binary notation

Perl 的所有这些值意味着相同。Perl 不以相同的格式存储值。它将在内部将这些十六进制,二进制,八进制转换为十进制值。

赋值是标量上最常见的操作,而且非常简单。Perl 用于那个等号。它从右侧获取表达式的值,并将此值放入变量中。

我们来看看例子:

$size=15;             # give $size value of 15

$y = -7.78;           # give $y value of -7.78

你不仅可以将变量放入变量,还可以放入表达式。

$z = 6 + 12               # give $z value of 18

字符串

字符串:它也是非常简单的标量类型。

Perl 中字符串的最大长度取决于计算机的内存量。字符串的大小没有限制,任何数量的字符,符号或单词都可以组成你的字符串。最短的字符串没有字符。最长的可以填满所有系统内存。Perl 程序可以完全用 7 位 ASCII 字符集编写。Perl 还允许你添加任何 8 位或 16 位字符集。字符串文字中的非 ASCII 字符。Perl 还增加了对 Unicode UTF-8 的支持。

与数字一样,有两种不同类型的字符串:

   - 单引号字符串文字    - 双引号字符串文字

单引号字符串文字

单引号用于包含你想要按字面意思获取的数据。一个简短的例子,一切都应该清楚:

Perl 示例:

#!/usr/bin/perl 

$num = 7;

$txt = 'it is $num';

print $txt;

输出

it is $num

这里由于未使用$num 的单引号值而且文字字符’$’,’n’,‘u’和’m’被添加到$txt 的值中

双引号字符串文字

双引号用于包含需要在处理之前进行插值的数据。这意味着转义的字符和变量不是简单地插入到以后的操作中,而是在现场进行评估。转义字符可用于插入换行符,制表符等。

Perl 示例:

$num = 7; 

$txt = "it is $num"; 

print $txt;

输出:

it is 7

这里由于$num 的双引号值被添加到$txt 的值中

双引号内插标量和数组变量,但不是哈希数组值。另一方面,你可以使用双引号来插入数组和哈希数组的切片。

神秘 \n

考虑以下程序

Perl 示例:

print "hello \n";

输出:

hello

Perl 不显示 hello \n,而只显示 hello。为什么?因为 \n 是一个特殊符号,表示你希望在程序中显示文本时转到新行。下一个问题 - 还有其他特殊标志吗?对,还有的!但不要担心 - 它们的数量不多。请查看下表

构造 说明
\n 换行
\r 回车
\t 制表符
\f 换页符
\b 退格
\a 警报
\e 逃避
\007 任何八进制 ASCII 值(这里,007 =\a
\x7f 任何十六进制值(这里,7f = 删除)
\\ 反斜杠
\“ 双引号
\l 小写下一个字母
\L 将所有后续字母小写,直到 \E
\u 大写下一个字母
\U 大写所有后面的字母,直到 \E
\E 终止 \L\U

我知道,这些特殊符号并少……但请相信我,你必须要了解它们。

字符串变量

它是相同的操作,我们在数字赋值中看到。Perl 从等号的右侧获取我们的字符串,并将此字符串放入变量。

Perl 示例:

$string = 'tutorial';                                      # give $string the eight-character string 'tutorial'

print $string;

$string = $size + 3 ;                                           # give $string the current value of $size plus 3

print $string;

$string = $string * 5;                                         # multiplied $string by 5

print $string;

输出:

tutorial315

如你所见,你可以将数字和字符串放在相同的变量中。没有变量类。

字符串连接(.):

连接运算符 . 联合两个或多个字符串。记住,如果字符串包含引号,回车符,反斜杠,则需要使用反斜杠转义所有这些特殊字符。

Perl 示例:

#!/usr/bin/perl

$a = "Tom is";

$b = "favorite cat";

$c = $a ." mother's ". $b;

print $c;

输出:

Tom is mother's favorite cat.

字符串 $a$b 被连接并使用 . 操作符存储在 $c 中。。

我们最后来看,

数字和字符串之间的转换:

如你所知,Perl 会根据需要自动将数字转换为字符串。Perl 如何知道我们现在需要什么?这很简单 - 一切都取决于运算符(我们稍后将讨论运算符,现在,只接受有很多运算符,数字和字符串不同)如果运算符需要数字,Perl 将使用该值作为数字。如果运算符需要字符串,Perl 将使用该值作为字符串。换句话说 - 你不必担心这种转换。简短的例子,一切都应该清楚:

Perl 示例:

$string = "43";

$number = 28;

$result = $string + $number;

print $result;

输出:

71

$string 的值转换为整数并添加到 $number 的值。

添加的结果 71 分配给 $result

变量的范围 - 访问修饰符

我们可以在程序的任何地方声明一个标量。但是你需要指定一个访问修饰符

有三种类型的修饰符

我的 2.本地的 我们的

我的:使用它你可以声明块中特定的任何变量。即在花括号内。

#!/usr/bin/perl 

my $var=5;

if(1)

{ 

my $var_2 =$var;

}

print $var_2;

没有输出

该程序的输出什么都没有!

![PERL 初学者教程 - 完整指南](/img/Tutorial/Perl/Why no output.png)

在上面的例子中,你将看到有两个变量声明,如果是块($var_2)而另一个是在 if 块($var)之外。在块外部声明的变量将可以被 if 块访问,但是如果块内部声明的变量将无法被外部程序访问。

Local:使用这个我们实际上可以将相同的变量值屏蔽到不同的值而不实际更改变量的原始值,假设我们有一个变量$a,其值被赋值为 5,你实际上可以通过以下方式更改该变量的值使用 local 关键字重新声明相同的变量而不改变变量的原始值 5.让我们看一下如何使用一个例子。

#!/usr/bin/perl

$var = 5;

{

local $var = 3;

print "local,\$var = $var \n";

}

print "global,\$var = $var \n";

上述程序的输出将以这种方式。

local,$var = 3
global,$var = 5

这样我们就可以在不影响原始值的情况下更改变量的值。

our:一旦使用访问修饰符 our 声明变量,它就可以在整个包中使用。假设你有 Perl 模块或者包 test.pm,它有一个用范围声明的变量。可以在将使用该包的任何脚本中访问此变量。

如果你认真对待 Perl 编程,那么你应该开始使用

#!/usr/bin/perl 

use strict;

这将帮助你编写更好,更清晰的代码。 ‘use strict’启用严格的编译指示,这将使你使用我的关键字声明你的变量。

这是一个很好的编程习惯

#!/usr/local/bin/perl

use strict;

$var = 10;

print "$var";

结果:错误

#!/usr/local/bin/perl

use strict;

my $var = 10;

print "$var";

输出:

10