Perl 于 1988 年初发布,是一种后现代编程语言,通常被认为是脚本语言,但它也能够进行面向对象编程。它是一种成熟的语言,拥有数以万计的库、GUI 框架、名为 Raku 的衍生语言以及活跃且充满热情的社区。其开发者以其灵活性为荣:根据其创建者 Larry Wall 的说法,Perl 不对其用户强制执行任何特定的编程风格,并且完成大多数事情的方法不止一种。
Perl 仍然像它被广泛使用时一样强大,这使其成为新手程序员尝试的绝佳语言。
[ 下载 Perl 速查表 ]
Perl 基础知识
在 Linux 和 macOS 上,您已经安装了 Perl。在 Windows 上,从 Perl 网站下载并安装它。
Perl 表达式
Perl 源代码的基本单元是表达式,它是任何返回值的东西。
例如,1
是一个表达式。它返回值 1
。表达式 2
返回值 2
,而 a
返回字母 a
。
表达式可以更复杂。表达式 $a + $b
包含变量(数据的占位符)和加号 (+
),这是一个数学运算符。
Perl 语句
Perl 语句由表达式组成。每个语句都以分号 (;
) 结尾。
例如
$c = $a + $b;
要尝试运行您自己的 Perl 语句,请打开终端并键入
$ perl -e 'print ("Hello Perl\n");'
Perl 代码块
Perl 语句块可以用大括号 ({ }
) 分组在一起。代码块是一个有用的组织工具,但它们也为数据提供作用域,您可能只需要在程序的一小部分中使用这些数据。Python 使用空格定义作用域,LISP 使用括号,而 C 和 Java 使用大括号。
变量
变量是数据的占位符。人类每天都在使用变量,而没有思考它。例如,单词“它”可以指代任何名词,因此我们将其用作方便的占位符。“找到我的手机并把它给我”实际上意味着“找到我的手机并把我的手机给我”。
对于计算机来说,变量不是一种便利,而是一种必需品。变量是计算机识别和跟踪数据的方式。
在 Perl 中,您可以通过声明变量名及其内容来创建变量。
Perl 中的变量名始终以美元符号 ($
) 开头。
这些简单的语句创建了一个包含字符串“Hello”和“Perl”的变量 $var
,然后将变量的内容打印到您的终端
$ perl -e '$var = "hello perl"; print ("$var\n");'
流程控制
大多数程序都需要做出决策,这些选择由条件语句和循环定义和控制。if 语句是最直观的语句之一:Perl 可以测试特定条件,并且 Perl 根据该条件决定程序的进行方式。语法与 C 或 Java 类似
my $var = 1;
if($var == 1){
print("Hello Perl\n");
}
elsif($var == 0){
print("1 not found");
}
else{
print("Good-bye");
}
Perl 还具有 if
语句的简短形式
$var = 1;
print("Hello Perl\n") if($var == 1);
函数和子例程
尽可能多地重用代码是一种有益的编程习惯。这种做法减少了错误(或将错误合并到一个代码块中,因此您只需修复一次),使您的程序更易于维护,简化了程序的逻辑,并使其他开发人员更容易理解。
在 Perl 中,您可以创建一个子例程,它接受输入(存储在一个名为 @_
的特殊数组变量中)并且可能返回输出。您可以使用关键字 sub
创建子例程,后跟您选择的子例程名称,然后是代码块
#!/usr/bin/env perl
use strict;
use warnings;
sub sum {
my $total = 0;
for my $i(@_){
$total += $i;
}
return($total);
}
print &sum(1,2), "\n";
当然,Perl 有许多您永远不必自己创建的子例程。有些是 Perl 内置的,社区库提供了其他的。
使用 Perl 编写脚本
Perl 可以编译,也可以用作解释型脚本语言。后者是刚开始时最简单的选择,尤其是如果您已经熟悉 Python 或 shell 脚本。
这是一个用 Perl 编写的简单掷骰子脚本。通读一遍,看看您是否能理解它。
#!/usr/bin/env perl
use warnings;
use strict;
use utf8;
binmode STDOUT, ":encoding(UTF-8)";
binmode STDERR, ":encoding(UTF-8)";
my $sides = shift or
die "\nYou must provide a number of sides for the dice.\n";
sub roller {
my ($s) = @_;
my $roll = int(rand($s));
print $roll+1, "\n";
}
roller($sides);
第一行告诉您的 POSIX 终端使用哪个可执行文件来运行脚本。
接下来的五行是样板包含和设置。use warnings
设置告诉 Perl 检查错误并在终端中发出关于它发现的问题的警告。use strict
设置告诉 Perl 在发现错误时不运行脚本。
这两个设置都有助于您在代码中的错误导致问题之前找到它们,因此通常最好在脚本中激活它们。
脚本的主要部分首先解析从终端启动脚本时提供的参数。在本例中,预期的参数是虚拟骰子的所需面数。Perl 将其视为堆栈,并使用 shift
函数将其分配给变量 $sides
。当没有提供参数时,会触发 die
函数。
使用 sub
关键字创建的 roller
子例程或函数使用 Perl 的 rand
函数生成一个伪随机数,最大为(但不包括)作为参数提供的数字。这意味着此程序中的 6 面骰子永远不会掷出 6,但它可以掷出 0。这对计算机和程序员来说没问题,但对大多数用户来说,这很令人困惑,因此可以被认为是错误。为了在错误成为问题之前修复该错误,下一行将 1 添加到随机数,并将总数打印为骰子滚动结果。
当引用传递给子例程的参数时,您引用特殊变量 @_
,它是一个数组,其中包含括号中作为函数调用一部分的所有内容。但是,当从数组中提取值时,数据将强制转换为标量(示例中的 $s
变量)。
子例程在被调用之前不会运行,因此脚本的最后一行调用自定义 roller
函数,并将命令的参数作为函数的参数提供。
将文件另存为 dice.pl
并标记为可执行文件
$ chmod +x dice.pl
最后,尝试运行它,提供一个最大数字,从中选择其随机数
$ ./dice.pl 20
1
$ ./dice.pl 20
7
$ ./dice.pl 20
20
还不错!
Perl 速查表
Perl 是一种有趣而强大的语言。虽然自 Perl 成为默认脚本语言以来,像 Python、Ruby 和 Go 这样的新兴语言吸引了很多人的注意力,但 Perl 仍然非常强大。事实上,它比以往任何时候都更好,拥有光明的未来。
下次您寻找一种更灵活、交付选项简单的语言时,请尝试 Perl 并下载速查表!
5 条评论