Linux 操作系统初学者的 10 个初级 Perl 编程窍门

举报
Tiamo_T 发表于 2022/01/21 08:22:14 2022/01/21
【摘要】 想要学习 perl 程序语言的开发人员,将本文中了解 10 个基本perl 编程窍门。

想要学习 perl 程序语言的开发人员,将本文中了解 10 个基本perl 编程窍门。

1. 检查已安装 Perl 模块的版本

要检查模块的版本号,请使用以下命令。

#-- check the version number of CGI module
$ perl -MCGI -e 'print "$CGI::VERSION \n"'

#-- check the version number of Regexp::Common module
$ perl -MRegexp::Common -e 'print "$Regexp::Common::VERSION \n"'


2. 指定要使用的最低 Perl 模块版本

有时您可能想在程序中使用特定版本的 perl 模块。为避免使用该模块的早期版本,请在 use 'module' 语句中附加您想要的最低版本号,如下所示。

#-- Use version 5.8 of later of module LWP
use LWP 5.8

注意:如果安装的模块版本低于您在 use 命令中指定的版本,您的 perl 程序将退出并显示相应的错误消息。

3. 开发 Web 应用程序的有用 Perl 模块

如果您正在开发 Web 应用程序,您可能需要考虑使用以下 perl 模块。

  • CGI – 用于创建网页的通用模块
  • 模板– 用于生成动态网页内容的模板工具包
  • LWP – LWP 用于获取网页内容
  • WWW::Mechanize – 使用它来自动与网站交互

4. 确定 Perl 脚本运行的操作系统

底层操作系统的名称存储在变量 $^O 中。以下是一些常见的 $^O 值

  • linux——Linux
  • MSWin32 - 视窗
  • aix – AIX
  • Solaris – Solaris

注意:存储在 $^O 中的值仅包含操作系统的名称,而不包含版本号。要确定版本号,请考虑使用 POSIX 包中的 POSIX::uname()。

5. 在 Perl 脚本中定义常量值

定义常量值的最佳方法是使用 Perl Readonly或  Constant模块,如下所示。

use Readonly;
Readonly my $PI => 3.1415926535;

(or)

use Constant PI => 3.1415926535;

请注意以下事项:

  • 使用 Readonly 模块,您可以定义 Readonly 标量、散列和数组。
  • 如果你试图修改一个只读变量,程序将会死掉。

6. 确定运行 Perl 脚本的操作系统用户和/或操作系统组

使用以下预定义变量获取当前进程的用户和组信息:

  • $< – 真实用户 id (uid); 独特的价值
  • $> - 有效用户ID(euid);独特的价值
  • $( - 真正的组 id (gid); 组列表(用空格分隔)
  • $) – 有效组 id (egid); 组列表(以空格分隔)

请注意以下事项:

  • 此信息仅适用于 Unix 系统
  • 这些变量持有的值是整数。
  • 要获取用户名和组名,请使用 '(getpwuid($<))[0]'(用于用户信息)和 'getgrgid($()'(用于组)。

7.执行外部命令

有许多方法可以从 Perl 执行外部命令,如下所述。

  • system() – 你想执行一个命令并且不想捕获它的输出
  • exec – 你不想返回调用 perl 脚本
  • 反引号- 你想捕获命令的输出
  • open – 你想将命令(作为输入或输出)传送到你的 perl 脚本

8. 使用 B::Deparse 解析简单凌乱的 Perl 脚本

有一大堆混淆的或者只是简单的凌乱且难以阅读的 Perl 代码?B::Deparse模块可能会有所帮助。它编译,然后反编译给定的程序,扩展它并很好地格式化它。它删除了在 perl 程序中编写的注释行。

要在命令行运行它,输入“perl -MO=Deparse prog.pl”。这是它的用法示例,

首先创建输入程序:

$ cat crawl.pl 
for(74,117,115,116){$::a.=chr};(($_.='qwertyui')&& 
(tr/yuiqwert/her anot/))for($::b);for( $::c){$_.=$^X; 
/(p.{2}l)/;$_=$1}$::b=~/(..)$/;print("$::a$::b $::c hack$1.") ;

将 perl 脚本可怕.pl 传递给 Deparse 模块

$ perl -MO=Deparse scary.pl
foreach $_ (74, 117, 115, 116) {
$a .= chr $_;
}
;
$_ .= 'qwertyui' and tr/eiqrtuwy/nr oteah/ foreach ($b);
foreach $_ ($c) {
$_ .= $^X;
/(p.{2}l)/;
$_ = $1;
}
$b =~ /(..)$/;
print "$a$b $c hack$1.";
scary.pl syntax OK

9. 列出已安装的 DBI 驱动程序

DBI 是 Perl 的标准数据库接口模块。以下 Perl 程序打印所有已安装 DBI 驱动程序的列表。

use strict;
use warnings;

use DBI;

print map "$_\n",DBI->available_drivers;

上述程序的示例输出:

DBM
ExampleP
File
Proxy
Sponge
mysql

如果您需要的驱动程序没有安装,请使用 CPAN 找到正确的 DBD(数据库驱动程序)模块。

10.正则表达式特殊变量

perl 中最有用的特性之一或最强大的字符串操作工具是正则表达式。

其核心是许多其他 UNIX 实用程序共享的正则表达式。
Perl 有许多特殊变量,它们在每次 m// 或 s/// 正则表达式匹配后填充。

  • $1、$2、$3 等持有反向引用。
  • $+ 保存最后一个(编号最高的)反向引用。
  • $& (美元符号)保存整个正则表达式匹配。
  • $' (美元后跟撇号或单引号)包含正则表达式匹配之后(右侧)的字符串部分。
  • $`(美元反引号)在正则表达式匹配之前(左侧)保存字符串的一部分。

当性能很重要时,不建议在 perl 脚本中使用这些变量,因为它会导致 Perl 减慢整个 perl 脚本中所有正则表达式匹配的速度。

所有这些变量都是只读的,并且一直持续到尝试下一次正则表达式匹配。
例子

$string = "This is the geek stuff article for perl learner";
$string =~ /the (g.*) stuff(.*) /;
print "Matched String=>$&\nBefore Match=>$`\nAfter Match=>$'\nLast Paren=>$+\nFirst Paren=>$1\n";

上述示例的输出:

Matched String=>perl 的geek stuff article 
Before Match=>This is 
After Match=>learner 
Last Paren=> article for perl 
First Paren=>geek
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。