珀尔 |使用 Hash bang 或 Shebang 线
实用提取和报告语言或 Perl 是一种基于解释器的语言。当我们在 Linux 和 Mac OSX 等类 Unix 系统上执行 Perl 脚本时,Hash-bangs 或 shebangs 很有用。 Hashbang 行是 Perl 程序的第一行,是 Perl 二进制文件的路径。它允许直接调用 Perl 脚本,而无需将文件作为参数传递给 Perl。 Perl 中的 Hashbang 行如下所示:
#!/usr/bin/perl
之所以这样称呼 Hashbang 行,是因为它以Hash(#)和bang(!)开头。 Perl 中的 hashbang 行在 Perl 代码中非常重要。现在,让我们开始使用这个 Hashbang 行。
示例:假设我们有一个 Perl 的 hello world 程序脚本,我们将在带有终端的 Linux 系统上执行它。
use strict;
use warnings;
print "Hello World\n";
现在,我们将使用名称hello.pl保存它,并在终端中执行它 -
$ perl hello.pl
输出:
在这里,在上面的代码中,终端首先运行 Perl,然后要求 Perl 运行代码脚本。如果代码脚本在没有首先调用 Perl 的情况下运行,则会出现错误。
尝试运行如下所示的代码:
$ hello.pl
输出:
在这里,我们使用的 shell 试图解释文件中的命令。但是,它在 Linux/Unix 中找不到命令print 。因此,需要通知 shell 它是一个 Perl 脚本。这就是 Hashbang 概念发挥作用的地方。 Hashbang 将脚本通知终端。
但是,在执行此代码之前,需要设置 shell 的路径以将当前目录添加到现有目录中。这可以通过执行以下命令来完成:
$ PATH = $PATH:$(pwd)
这会将当前工作目录附加到PATH 环境变量中的目录列表中。
接下来,需要在 Perl 脚本文件hello.pl中添加 Hash-bang 行#!/usr/bin/perl 。此行始终添加在代码的开头,即代码脚本的第一行是 Hashbang 行。
#!/usr/bin/perl
use strict;
use warnings;
print "Hello World\n";
如果上面的代码作为$ hello.pl运行,而不先执行 Perl,那么输出将是:
上面的代码工作正常,并且由于脚本的第一行添加了 Hashbang 行#!/usr/bin/perl而不会产生错误。
执行脚本时,它会在当前 shell 环境中运行。如果脚本以散列和爆炸 (hash-bang) #!然后 shell 将运行执行其路径位于 hash-bang 行(在本例中为/usr/bin/perl )的应用程序,这是 Perl 编译器解释器的标准位置。因此,hash-bang 行保存了 Perl 编译器解释器的路径。
现在,当文件中没有 hash-bang 行时会发生错误,我们尝试在不显式运行 Perl 的情况下执行它。 shell 假定脚本是用Bash编写的,因此会尝试相应地执行它,从而导致错误。