perl很重要的一个特性是能够把外壳命令和perl代码同时放在同一个文件里。perl的Shell模块让这成为可能。Shell模块还能够在需要的时候使用AUTOLOAD函数来定义函数。
Shell模块并不真的能够将任何外壳命令定义为函数。但是,它使用perl的AUTOLOAD函数,将任何未经定义的函数作为命令传递给操作系统的外壳。
当你“使用”Shell模块的时候,你可以在“use”命令行里指定一系列命令。这样做的话,你就可以自动地把这些命令定义为由Shell输出的函数。这就能够让你调用它们,而不需要使用括号,如果使用的话,就会让程序看起来更像一个外壳脚本或者批处理文件。
例如,比较下面两个(结果)相同的调用:
这段代码:
use Shell;
copy('*.pl', 'backup');
和下面是一样的:
use Shell qw(copy);
copy '*.pl', 'backup';
第二个例子看起来更像是一个批处理文件,而第一个看起来更像传统的编程语言。
下面的例子将外壳命令和perl的文件测试操作符组合起来了。它会检查两件事:看看已传递的名称是否是一个文件,以及看看它是否在过去一周被更新。如果是的话,它就将文件复制到备份目录里。
use Shell qw(copy);
copy $ARGV[0], 'backup' if (-f $ARGV[0] && -M $ARGV[0] <= 7);
将perl的处理能力和标准的操作系统命令组合在一起,结果就是一个强大的脚本工具。使用Shell模块使得人们可以使用任何操作系统命令,就好像它们是perl内置的函数一样。
本文作者:James Brown具有20年的行业开发专长和经验,拥有多重工作背景,包括数字硬件设计,网络操作系统开发和分布式计算等。