1.5.4 专用变量
除了前面介绍的数据类型和变量声明语法外,Perl在核心功能内还引入了一套专用变量。这些变量通常用于保存与脚本或脚本执行的单个实例及功能相关的动态信息。具体介绍如下。
● $0:保存当前执行的脚本名称。这对于在报告和派生中引用脚本名称是很有用的。
● $_:通常用于在默认的输入流中搜索和匹配字符串。
● $/:通常被定义为将输入流分成多个部分的分隔符。其默认值是换行符\n。
● @ARGV:ARGV列表数组包含脚本执行期间要处理的命令行参数。列表数组是通过直接关联来处理的。如,$ARGV[0]是传给Perl脚本的第一个参数。
● %INC:%INC数组包含当前脚本依赖的完整的和正确的解析与执行所包含和必需的文件的字符串列表。
● @INC:和%INC关联数组不同,该列表数组包含执行脚本所需的文件的地址列表。
● %ENV:和大多数其他程序设计语言一样,%ENV数组包含所有的系统环境变量。
● STDIN:用于为Perl脚本声明和引用默认的输入流。STDIN通常是指用CONTROL _RETURN和预定义的转义字符串结束的人工输入。
● STDOUT:用于为Perl脚本声明和引用默认的输出流。在几乎所有的示例中,STDOUT都用于在Win32系统的命令行窗口和基于UNIX平台的本地shell上打印出输出结果。
● STDERR:用于为Perl脚本声明和引用默认的错误流。通常用于捕获或调试突发的异常。
前述STD变量非常适合于在捕获平台定义的方法内列出的平台无关变量。例如,在大多数UNIX和Linux环境中,STDOUT会将信息和数据显示在shell上;而在Win32环境中,这些信息将显示在命令行窗口中。
1.5.5 模式匹配和替换
在进行模式搜索和匹配的时候,正则表达式引擎优于所有其他语言,这一点是不容置疑的。Perl会自动包含match和subst两个函数,这两个函数都很容易使用和实现。匹配函数match携带两个参数:第一个是被搜索的字符串,第二个是查找的模式。替换函数subst的前两个参数与match相同,只是第三个参数是替换被搜索字符串中的模式的字符串。
match($str, $pattern)
subst($str, $pattern, $substitution)
除了这两个函数外,在内联匹配和替换时,还可以使用3个快捷操作。在下面示例中,第一行将模式hacker赋给$code,第2行搜索任何与hacker不匹配的地方,第3行用内联替换表达式将hacker替换为cracker。
$code =~ m/hacker/;
$code =! m/hacker/;
$code =~ s/hacker/cracker/;
表达式中的下面语句用于识别所有的大小写字母:
/[A-Za-z]/
下面语句用于识别小写字母和所有数字:
/[0-9a-z]/
1.5.6 正则表达式修饰符
下面总结出了Perl的正则表达式修饰符。
● /e:用于协助代码评估,如用于评估表达式s///的右侧部分。
● /ee:与/e相似,惟一的区别是驻留在s///后侧的字符串必须首先被解释,然后才能作为代码来执行。
● /g:用于指定是否搜索所有匹配的模式。
● /gc:如果模式在逻辑上是无效的,该修饰符就会确保搜索位置不被重置。
● /i:用于为给定的模式创建不关心或可忽略的情况。
● /m:对于识别嵌有/n的字符串十分有用,可以用^匹配/n之前的模式,用$匹配/n后面的模式。
● /o:通知引擎正则表达式只被解释一次。
● /s:与/m类似,它用于匹配嵌有/n的模式。接着用.来匹配/n,并忽略$*。
● /x:通常用于增加已解释的表达式的空格和注释。虽然不经常使用,但是在创建良好的文档结构和易于理解的Perl代码时是很有价值的。
1.5.7 常用的Perl工具
本节用脚本实例来说明Perl语言所包含的某些很重要的特性和被广泛使用的技术。信息安全人员通常用Perl快速建立安全问题原型验证、编写exploit、测试产品和应用程序、识别新的基于Web的漏洞以及创建复杂的正则表达式引擎。和大多数其他语言不同的是,Perl脚本不能被编译,而其他语言在编译后却变成了字节码。因为被编译的结构化语言通常会提供一个额外的安全层,所以在执行应用程序的时候,其源代码是不容易被探知的。
然而,也有少数含有“编译的”Perl脚本的程序,更确切地说,是将Perl脚本植入了可执行的应用程序中。大多数这种程序都使用了捆绑技术,将Perl的核心库和动态链接库以及追加到包最后的脚本进行捆绑或包装。在执行脚本的时候,该技术暂时将该语言保存在内存中,然后在脚本完成任务的时候再重新分配内存空间。使用这种Perl编译器的最主要缺点是可执行的代码量大,生成的.exe文件内包含的内容会显著增加代码量。
Perl编译器有:
● ActiveState的Perl开发工具包(www.activestate.com)。
● PerlCC(http://www.perl.com/doc/manual/html/utils/perlcc.html)。






