Linux 操作系统初学者的 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
- 点赞
- 收藏
- 关注作者
评论(0)