Perl 语言基础入门
下载这份编程速查表，开始学习 Perl 的力量。
Perl
117.176.107.169
做为系统和软件依赖而安装的语言(比如python, lua...)，多多少少都用过，唯独perl还真一次都没试过。
来自四川南充的 Chrome 80.0|Windows 10 用户
2022-02-23T10:15:20.000
下载这份编程速查表，开始学习 Perl 的力量。

> 
> 下载这份编程速查表，开始学习 Perl 的力量。
> 
> 
> 


![](/data/attachment/album/202202/22/171233dlrpnjj09jz0tz0n.jpg "Woman sitting in front of her computer")


Perl 发布于 1988 年初，是一种后现代的编程语言，它通常被认为是一种脚本语言，但它也能进行面向对象的编程。它是一种成熟的语言，拥有 [数以万计的库](http://cpan.org/)、GUI 框架，它有一种叫做 Raku 的衍生语言（即 Perl 6），以及一个活跃而热情的社区。它的开发者以其灵活性为荣。根据它的创造者 Larry Wall 的说法，Perl 并不对它的用户强加任何特定的编程风格，而且有不止一种方法来完成大多数事情。


Perl 非常健壮，它曾经被广泛使用，这使它成为新的程序员可以尝试的伟大语言。


* [下载 Perl 速查表](https://opensource.com/downloads/perl-cheat-sheet)


### Perl 基础知识


在 Linux 和 macOS 上，你已经安装了 Perl。在 Windows 上，请从 [Perl 网站](https://www.perl.org/get.html) 下载并安装它。


#### 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 脚本](https://opensource.com/article/20/4/bash-programming-guide)。


这里有一个用 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](https://opensource.com/article/19/7/what-posix-richard-stallman-explains) 终端要使用什么可执行文件来运行该脚本。


接下来的五行是模板式的包含内容和设置。`use warnings` 的设置告诉 Perl 检查错误，并在终端对它发现的问题发出警告。`use strict` 设置告诉 Perl 在发现错误时不要运行脚本。


这两个设置都可以帮助你在代码中的错误导致问题之前发现它们，所以通常最好在你的脚本中激活它们。


脚本的主要部分开始于对脚本从终端启动时提供给它的 [参数](https://opensource.com/article/21/8/linux-terminal) 进行分析。在这种情况下，预期的参数是一个虚拟骰子的所需的面的数量。Perl 将其视为一个堆栈，并使用 `shift` 函数将其分配给变量 `$sides`。当没有提供参数时，`die` 函数会被触发。


用 `sub` 关键字创建的 `roller` 子程序（或函数），使用 Perl 的 `rand` 函数生成一个伪随机数，最大不超过参数的数字。这意味着在这个程序中，一个 6 面的骰子不可能掷出 6，但它可以掷出 0。这对计算机和程序员来说是没有问题的，但对大多数用户来说，这是令人困惑的，所以它可以被视为一个 bug。为了在这个 bug 成为问题之前解决它，下一行在随机数上加 1，并将结果作为掷骰子的结果打印出来。


当引用传递给子程序的参数时，你引用的是特殊变量 `@_`，它是一个数组，包含了函数调用时括号内的所有内容。然而，当从数组中提取一个值时，数据被转换成一个标量（例子中的 `$s` 变量）。


子程序在被调用之前不会运行，所以脚本的最后一行调用了自定义的 `roller` 函数，将命令的参数作为函数的参数。


将该文件保存为 `dice.pl`，并标记为可执行：



```
$ chmod +x dice.pl

```

最后，尝试运行它，为它提供一个最大的数字，从中选择其随机数：



```
$ ./dice.pl 20
1
$ ./dice.lisp 20
7
$ ./dice.lisp 20
20

```

没问题！


### Perl 速查表


Perl 是一种有趣而强大的语言。尽管自从 Perl 成为默认的脚本语言后，Python、Ruby 和 Go 等新兴语言引起了许多人的注意，但 Perl 的功能并不弱。事实上，它比以往任何时候都要好，而且前途光明。


下次你想找一种更灵活的语言，并有简单的交付方式时，不妨试试 Perl，并[下载这个速查表](https://opensource.com/downloads/perl-cheat-sheet)！




---


via: <https://opensource.com/article/22/2/perl-cheat-sheet>


作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

