mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-23 21:20:42 +08:00
218 lines
8.6 KiB
Markdown
218 lines
8.6 KiB
Markdown
[#]: subject: "Learn Perl in 2022"
|
||
[#]: via: "https://opensource.com/article/22/2/perl-cheat-sheet"
|
||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||
[#]: collector: "lujun9972"
|
||
[#]: translator: "wxy"
|
||
[#]: reviewer: "wxy"
|
||
[#]: publisher: "wxy"
|
||
[#]: url: "https://linux.cn/article-14296-1.html"
|
||
|
||
Perl 语言基础入门
|
||
======
|
||
|
||
> 下载这份编程速查表,开始学习 Perl 的力量。
|
||
|
||
![](https://img.linux.net.cn/data/attachment/album/202202/22/171233dlrpnjj09jz0tz0n.jpg)
|
||
|
||
Perl 发布于 1988 年初,是一种后现代的编程语言,它通常被认为是一种脚本语言,但它也能进行面向对象的编程。它是一种成熟的语言,拥有 [数以万计的库][2]、GUI 框架,它有一种叫做 Raku 的衍生语言(即 Perl 6),以及一个活跃而热情的社区。它的开发者以其灵活性为荣。根据它的创造者 Larry Wall 的说法,Perl 并不对它的用户强加任何特定的编程风格,而且有不止一种方法来完成大多数事情。
|
||
|
||
Perl 非常健壮,它曾经被广泛使用,这使它成为新的程序员可以尝试的伟大语言。
|
||
|
||
- [下载 Perl 速查表][3]
|
||
|
||
### Perl 基础知识
|
||
|
||
在 Linux 和 macOS 上,你已经安装了 Perl。在 Windows 上,请从 [Perl 网站][4] 下载并安装它。
|
||
|
||
#### 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 脚本][7]。
|
||
|
||
这里有一个用 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][13] 终端要使用什么可执行文件来运行该脚本。
|
||
|
||
接下来的五行是模板式的包含内容和设置。`use warnings` 的设置告诉 Perl 检查错误,并在终端对它发现的问题发出警告。`use strict` 设置告诉 Perl 在发现错误时不要运行脚本。
|
||
|
||
这两个设置都可以帮助你在代码中的错误导致问题之前发现它们,所以通常最好在你的脚本中激活它们。
|
||
|
||
脚本的主要部分开始于对脚本从终端启动时提供给它的 [参数][14] 进行分析。在这种情况下,预期的参数是一个虚拟骰子的所需的面的数量。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,并[下载这个速查表][3]!
|
||
|
||
--------------------------------------------------------------------------------
|
||
|
||
via: https://opensource.com/article/22/2/perl-cheat-sheet
|
||
|
||
作者:[Seth Kenlon][a]
|
||
选题:[lujun9972][b]
|
||
译者:[wxy](https://github.com/wxy)
|
||
校对:[wxy](https://github.com/wxy)
|
||
|
||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||
|
||
[a]: https://opensource.com/users/seth
|
||
[b]: https://github.com/lujun9972
|
||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_women_computing_2.png?itok=JPlR5aCA (Woman sitting in front of her computer)
|
||
[2]: http://cpan.org/
|
||
[3]: https://opensource.com/downloads/perl-cheat-sheet
|
||
[4]: https://www.perl.org/get.html
|
||
[5]: http://perldoc.perl.org/functions/print.html
|
||
[6]: http://perldoc.perl.org/functions/return.html
|
||
[7]: https://opensource.com/article/20/4/bash-programming-guide
|
||
[8]: http://perldoc.perl.org/functions/binmode.html
|
||
[9]: http://perldoc.perl.org/functions/shift.html
|
||
[10]: http://perldoc.perl.org/functions/die.html
|
||
[11]: http://perldoc.perl.org/functions/int.html
|
||
[12]: http://perldoc.perl.org/functions/rand.html
|
||
[13]: https://opensource.com/article/19/7/what-posix-richard-stallman-explains
|
||
[14]: https://opensource.com/article/21/8/linux-terminal
|