Perl 工作原理

作者: Marshall Brain
A computer code in a laptop.
Perl 是一种脚本语言。 RapidEye / Getty Images

Perl 是一种相当直接、广为人知且备受推崇的脚本语言。它用于各种任务(例如,您可以用它创建相当于 DOS 批处理文件或 C shell 脚本的文件),但在 Web 开发中,它主要用于开发 CGI 脚本

Perl 的优点之一是,由于它是一种脚本语言,人们会免费提供程序的源代码。这为您提供了通过示例学习 Perl 的机会,您还可以下载和修改数千个 Perl 脚本供自己使用。Perl 的缺点之一是,许多此类免费代码难以理解。Perl 倾向于一种难以置信的晦涩风格!

广告

本文假设您已经了解如何编程(如果您了解C 编程语言,这会特别容易)。一旦掌握了基础知识,Perl 就很容易使用。在本文中,我们将从头开始,向您展示如何使用 Perl 执行最常见的编程任务。通过本文的学习,您将能够相对轻松地编写自己的 Perl 脚本,并且能够以稍低的难度阅读他人编写的晦涩脚本,但这将是一个很好的起点。

入门

要开始使用 Perl,您需要 Perl 解释器。在任何 UNIX 机器上,它有 99.99% 的可能性已经存在。在 Windows 机器或 Mac 上,您需要下载最新版本的语言并将其安装到您的机器上。(更多信息请参阅本文末尾的链接。)Perl 在网络上广泛可用,并且是免费的。

接下来,请务必查看 Perl 附带的 DOCS 目录——其中会包含用户手册类型的内容。在某个时候,通读所有文档,或者至少粗略浏览一下,是不会有坏处的。最初它会很繁琐,但阅读本文后会更容易理解。

广告

Hello World

加载 Perl 后,请确保您的路径已正确设置,以包含 Perl 可执行文件。然后,打开文本编辑器并创建一个文本文件。在文件中,输入以下行

print "Hello World!\n";

将文件命名为“test1.pl”。在命令提示符下,输入

广告

perl test1.pl

Perl 将运行并执行文本文件中的代码。您应该会看到“Hello World!”字样打印到 stdout(标准输出)。如您所见,在 Perl 中创建和运行程序非常容易。(如果您使用 UNIX,可以在第一行放置一个注释,例如 #! /usr/bin/perl,这样您就不必在命令行输入“perl”这个词了。)

print 命令将内容打印到 stdout。\n 表示换行符。如果您将测试程序修改成这样会更清楚(# 表示注释)

# Print on two lines
   print "Hello\nWorld!\n";

请注意,print 命令理解它应该将“\n”解释为换行符,而不是字面字符。这种解释的发生不是因为 print 命令,而是因为使用了双引号(在 Perl 中称为引用)。如果您改用单引号,例如

print 'Hello\nWorld!\n';

那么 \n 字符将不会被解释,而是按字面意思使用。

还有反引号字符:`。一对反引号意味着引号内的内容应被解释为操作系统命令,并且该命令将执行并将其输出打印出来。如果您在反引号内放置一个操作系统的命令行操作,它将执行。例如,在 Windows NT 上,您可以输入

print `cmd /c dir`;

来运行 DIR 命令并查看当前目录下的文件列表。

您还会看到用于引用正则表达式的 / 字符。

print 命令将逗号理解为分隔符。例如

print 'hello', "\n", 'world!';

但是,您也会看到一个句点

print 'hello'. "\n". 'world!';

这个句点实际上是一个字符串连接运算符。

对于 C 语言爱好者,还有一个 printf 运算符。

PERL 注意

Windows NT 中,您不能输入

print `dir`;

因为 dir 不是一个单独的可执行文件——它是命令解释器 cmd 的一部分。在 DOS 提示符下键入 cmd /? 获取详细信息。

广告

变量

Perl 中的变量很有趣。您不需要声明它们,并且总是使用 $ 来表示它们。它们在第一次使用时就存在了。例如

   $s = "Hello\nWorld\n";
   $t = 'Hello\nWorld\n';
   print $s, "\n", $t;

或者

广告

   $i = 5;
   $j = $i + 5;
   print $i, "\t", $i + 1, "\t",  $j;     # \t = tab

或者

   $a = "Hello ";
   $b = "World\n";
   $c = $a . $b;    # note use of . to concat strings
   print $c;

由于 . 是字符串连接符,所以 .= 具有与 C 语言中 "+=" 相同的预期含义。因此,您可以这样写

   $a = "Hello ";
   $b = "World\n";
   $a .= $b;
   print $a;

您还可以创建数组

   @a = ('cat', 'dog', 'eel');
   print @a, "\n";
   print $#a, "\n";  # The value of the highest index, zero based
   print $a[0], "\n";
   print $a[0], $a[1], $a[2], "\n";

$# 符号获取数组中的最高索引,相当于数组元素数量减 1。与 C 语言一样,所有数组都从零开始索引。

您还可以创建哈希

   %h = ('dog', 'bark', 'cat', 'meow', 'eel', 'zap');
   print "The dog says ", $h{'dog'};

在这里,'bark' 与 'dog' 关联,'meow' 与 'cat' 关联,依此类推。相同声明的一种更具表达力的语法是

   %h = (
      dog => 'bark',
      cat => 'meow',
      eel => 'zap'
   );

=> 运算符会引用左侧字符串并充当逗号。

广告

循环与条件语句

您可以像在 C 语言中一样创建一个简单的 for 循环

   for ($i = 0; $i < 10; $i++)
   {
      print $i, "\n";
   }

While 语句很简单

广告

   $i = 0;
   while ( $i < 10 )
   {
      print $i, "\n";
      $i++;
   }

If 语句也同样简单

   for ($i = 0; $i < 10; $i++)
   {
      if ($i != 5)
      {
         print $i, "\n";
      }
   }

布尔运算符的工作方式与 C 语言中相同

  • &&
  • ||
  • !

对于数字

  • == 等于
  • != 不等于
  • <, <=, >, >= (如预期)

其他

  • eq
  • ne
  • lt
  • le
  • gt
  • ge

如果您有一个数组,可以使用 foreach 轻松遍历它

   @a = ('dog', 'cat', 'eel');
   foreach $b (@a)
   {
      print $b, "\n";
   }

Foreach 取出数组 @a 的每个元素并放入 $b,直到 @a 中的所有元素都被处理完。

PERL 注意

即使是单行代码,您也必须使用“开始”和“结束”大括号——{}

广告

函数

您可以使用 sub 关键字创建一个子程序。所有传递给子程序的变量都存放在一个名为 _ 的数组中。因此,以下代码是有效的

   show ('cat', 'dog', 'eel');

   sub show
   {
      for ($i = 0; $i <= $#_; $i++)
      {
         print $_[$i], "\n";
      }
   }

请记住,$# 返回数组中的最高索引(元素数量减 1),所以 $#_ 是参数数量减 1。如果您喜欢这种晦涩难懂的风格,那么您一定会喜欢 PERL。

广告

您可以使用 local 关键字在子程序中声明局部变量,例如

   sub xxx
   {
      local ($a, $b, $c)
      ...
   }

您还可以使用 & 调用函数,例如

&show ('a', 'b', 'c');

& 符号只在存在歧义时才需要,但有些程序员会一直使用它。

要从子程序返回一个值,请使用关键字 return

广告

读取

从 STDIN 读取

要从 stdin(标准输入)读取数据,请使用 STDIN 句柄。例如

   print "Enter high number: ";
   $i = <STDIN>;
   for ($j = 0; $j <= $i; $j++)
   {
      print $j, "\n";
   }

只要您输入一个整数,这个程序就会按预期工作。<STDIN> 一次读取一行。您还可以使用 getc 读取一个字符,例如

广告

$i = getc(STDIN);

或者使用 read

read(STDIN, $i, 1);

read 命令第三个参数中的 1 是要读取的输入长度。

读取环境变量

PERL 定义了一个名为 ENV 的全局哈希,您可以使用它来检索环境变量的值。例如

print $ENV{'PATH'};

读取命令行参数

PERL 定义了一个全局数组 ARGV,其中包含传递给脚本的所有命令行参数。$#ARGV 是传递的参数数量减 1,$ARGV[0] 是第一个参数,$ARGV[1] 是第二个,依此类推。

您现在应该能够读写简单的 Perl 脚本了。您也应该能够深入阅读完整的文档以了解更多信息。有关更多信息,请参阅下一页的链接。

广告

常见问题

程序员还在使用 Perl 吗?
是的,程序员仍然使用 Perl。
Perl 在 2021 年还在使用吗?
是的,Perl 仍在被使用。
Perl 有什么用?
Perl 是一种高级、通用、解释型、动态的编程语言。它借鉴了 C 语言和 Shell 脚本等多种语言的许多特性,并用于系统管理和其他涉及用户界面的应用程序。

广告

加载中...