Perl - 语法概述

Perl 借鉴了多种语言的语法和概念:awk、sed、C、Bourne Shell、Smalltalk、Lisp 甚至英语。 但是,语言之间存在一些明确的差异。 本章旨在让您快速掌握 Perl 中预期的语法。

Perl 程序由一系列声明和语句组成,它们从上到下运行。 循环、子例程和其他控制结构允许您在代码中跳转。 每个简单的语句都必须以分号 (;) 结尾。

Perl 是一种自由格式的语言:您可以随意格式化和缩进它。 空格主要用于分隔标记,这与 Python 等语言不同,后者是语法的重要组成部分,而 Fortran 则无关紧要。


第一个 Perl 程序

交互模式编程

您可以在命令行中使用带有 -e 选项的 Perl 解释器,它可以让您从命令行执行 Perl 语句。 让我们在 $ 提示符下尝试如下 −

$perl -e 'print "Hello World\n"'

此执行将产生以下结果 −

Hello, world

脚本模式编程

假设您已经在 $ 提示符下,让我们使用 vi 或 vim 编辑器打开一个文本文件 hello.pl 并将以下行放入您的文件中。

#!/usr/bin/perl

# This will print "Hello, World"
print "Hello, world\n";

这里 /usr/bin/perl 实际上是 perl 解释器二进制文件。 在你执行你的脚本之前,一定要改变脚本文件的模式并赋予执行权限,一般设置为0755就可以了,最后你执行上面的脚本如下 −

$chmod 0755 hello.pl
$./hello.pl

此执行将产生以下结果 −

Hello, world

您可以根据自己的喜好为函数参数使用括号或省略它们。 他们只是偶尔需要澄清优先权问题。 以下两个语句产生相同的结果。

print("Hello, world\n");
print "Hello, world\n";

Perl 文件扩展名

可以在任何普通的简单文本编辑器程序中创建 Perl 脚本。 每种类型的平台都有多个程序可用。 网上有很多专为程序员设计的程序可供下载。

按照 Perl 惯例,Perl 文件必须以 .pl 或 .PL 文件扩展名保存,才能被识别为正常运行的 Perl 脚本。 文件名可以包含数字、符号和字母,但不能包含空格。 在空格处使用下划线 (_)。


Perl 中的注释

任何编程语言的评论都是开发者的朋友。 注释可用于使程序用户友好,解释器会简单地跳过它们而不影响代码功能。 例如,在上面的程序中,以散列 # 开头的行是注释。

简单地说 Perl 中的注释以井号开头并运行到行尾 −

# This is a comment in perl

以 = 开头的行被解释为嵌入文档(pod)的一部分的开始,并且编译器忽略下一个 =cut 之前的所有后续行。 以下是示例 −

#!/usr/bin/perl

# This is a single line comment
print "Hello, world\n";

=begin comment
This is all part of multiline comment.
You can use as many lines as you like
These comments will be ignored by the 
compiler until the next =cut is encountered.
=cut

这将产生以下结果 −

Hello, world

Perl 中的空格

Perl 程序不关心空格。 以下程序运行良好 −

#!/usr/bin/perl

print       "Hello, world\n";

但如果空格在带引号的字符串内,那么它们将按原样打印。 例如 −

#!/usr/bin/perl

# This would print with a line break in the middle
print "Hello
          world\n";

这将产生以下结果 −

Hello
          world

所有类型的空格,如空格、制表符、换行符等,当它们在引号之外使用时,对于解释器来说都是等效的。 仅包含空格的行,可能带有注释,称为空行,Perl 完全忽略它。


Perl 中的单引号和双引号

您可以在文字字符串周围使用双引号或单引号,如下所示 −

#!/usr/bin/perl

print "Hello, world\n";
print 'Hello, world\n';

这将产生以下结果 −

Hello, world
Hello, world\n$

单引号和双引号有一个重要的区别。 只有双引号插入变量和特殊字符,如换行符\n,而单引号不插入任何变量或特殊字符。 检查下面的示例,我们使用 $a 作为变量来存储一个值,然后打印该值 −

#!/usr/bin/perl

$a = 10;
print "Value of a = $a\n";
print 'Value of a = $a\n';

这将产生以下结果 −

Value of a = 10
Value of a = $a\n$

"here"文档

您可以非常舒适地存储或打印多行文本。 甚至您也可以使用"here"文档中的变量。 下面是一个简单的语法,仔细检查 << 和标识符之间不能有空格。

标识符可以是一个简单的单词,也可以是一些引用的文本,就像我们在下面使用的 EOF 一样。 如果标识符被引用,您使用的引用类型决定了此处文档中文本的处理方式,就像在常规引用中一样。 不带引号的标识符的作用类似于双引号。

#!/usr/bin/perl

$a = 10;
$var = <<"EOF";
This is the syntax for here document and it will continue
until it encounters a EOF in the first line.
This is case of double quote so variable value will be 
interpolated. For example value of a = $a
EOF
print "$var\n";

$var = <<'EOF';
This is case of single quote so variable value will be 
interpolated. For example value of a = $a
EOF
print "$var\n";

这将产生以下结果 −

This is the syntax for here document and it will continue
until it encounters a EOF in the first line.
This is case of double quote so variable value will be
interpolated. For example value of a = 10

This is case of single quote so variable value will be
interpolated. For example value of a = $a

转义字符

Perl 使用反斜杠 (\) 字符来转义可能会干扰我们的代码的任何类型的字符。 让我们举一个例子,我们要打印双引号和 $ 符号 −

#!/usr/bin/perl

$result = "This is \"number\"";
print "$result\n";
print "\$result\n";

这将产生以下结果 −

This is "number"
$result

Perl 标识符

Perl 标识符是用于标识变量、函数、类、模块或其他对象的名称。 Perl 变量名称以 $、@ 或 % 开头,后跟零个或多个字母、下划线和数字(0 到 9)。

Perl 不允许在标识符中使用标点符号,例如 @、$ 和 %。 Perl 是一种区分大小写的编程语言。 因此 $Manpower$manpower 在 Perl 中是两个不同的标识符。