Perl 语言基础入门
创始人
2024-03-02 10:04:32
0

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

Perl 发布于 1988 年初,是一种后现代的编程语言,它通常被认为是一种脚本语言,但它也能进行面向对象的编程。它是一种成熟的语言,拥有 数以万计的库、GUI 框架,它有一种叫做 Raku 的衍生语言(即 Perl 6),以及一个活跃而热情的社区。它的开发者以其灵活性为荣。根据它的创造者 Larry Wall 的说法,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。这对计算机和程序员来说是没有问题的,但对大多数用户来说,这是令人困惑的,所以它可以被视为一个 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,并下载这个速查表


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

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

不知道如何正确将Perl的...
将Perl的匹配转换为Python时,可以使用Python的正则表...
2025-01-12 08:31:40
不要停止使用Perl:正则...
如果在Perl的正则表达式中使用量词{,}的数量大于32766,可...
2025-01-10 22:31:58
不同网络的Hyperled...
在Hyperledger Fabric中,不同网络的订购者可以通过...
2025-01-09 19:39:26
不同类型值的Perl哈希
以下是一个示例代码,展示了如何创建一个包含不同类型值的Perl哈希...
2025-01-09 09:00:51
不同地区的Hyperled...
Hyperledger Fabric是一个开源的区块链平台,可以轻...
2025-01-08 22:33:51
不同的Hyperledge...
不同的Hyperledger Fabric链码可以查看世界状态中的...
2025-01-08 15:01:21

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...