perl编程_11 系统之间的互操作性.PDF
文本预览下载声明
下载
第11学时 系统之间的互操作性
到现在为止,我们介绍的所有P e r l特性基本上都属于独立的特性。如果你想完成某项操作,
那么你必须自己亲自执行这项操作,比如给数据排序,创建目录列表,插入配置信息等。问
题是它的工作量很大,你必须重复进行可以在其他地方完成的工作。
关于P e r l ,现在有一种非常流行的说法,那就是它是一种非常出色的“胶水”语言。它的
意思是说,P e r l 能够使用操作系统作为组件来安装的其他程序,然后将这些程序组合起来,形
成一个更大的程序。它能够启动操作系统的实用程序,用它们来搜集信息,与你进行通信,
然后将它们关闭。
P e r l 能够将这些较小的实用程序“胶合”在一起,形成一个大得多而且更加有用的实用程
序。这种能力的好处是使你能够迅速编写在其他情况下需要花费很长时间来编写的代码,并
且能够对代码进行调试。你应该使用对你有用的任何手段,迅速而准确地编写代码。将系统
的实用程序胶合在一起,可使之具备很大的优点。
在本学时中,你将要学习:
• system()函数。
• 捕获输出。
• 代码的移植性。
本学时中的大部分代码例子都有两个版本,一个用于 Wi n d o w s和D O S 系
统,另一个用于U N I X系统。如果只有一个代码例子,那么你会在课文中找到
关于如何修改该代码,以适合另一种系统的需要,这种修改通常是少量的更
改。
11.1 system()函数
若要运行非P e r l 的命令,最简单的方法是使用 s y s t e m ( )函数。s y s t e m ( )函数能够暂停P e r l程
序的运行,然后运行外部命令,接着再运行你的 P e r l程序。s y s t e m函数的句法如下:
该语句中的c o m m a n d是你要运行的命令,如果一切正常,系统的返回值是 0 ,如果出现问
题,则返回非零值。请注意,这个结果与 Tr u e和F a l s e这两个P e r l标准返回值相反。
下面是在U N I X 系统上运行s y s t e m函数的一个例子:
下面这个例子显示在D O S /Wi n d o w s下运行s y s t e m 的情况:
第11学时 系统之间的互操作性使用127
下载
总的来说, s y s t e m 函数在上述两种系统结构下的运行情况是相同的。应该记住的是,两
种操作系统下运行的命令基本上是不同的。若要在 D O S下获得一个文件列表,可以使用 d i r命
令,而在 U N I X 下获得文件列表,要使用 l s 命令。在非常少见的情况下,比如在 p e r l d o c 中,
U N I X和D O S系统下的命令是相同的。
当s y s t e m 函数运行外部命令时,该命令的输出在屏幕上显示的情况与 P e r l程序输出的情况
是相同的。如果该外部命令需要输入数据,那么来自终端的输入与你的 P e r l程序从终端读入的
输入是相同的。 s y s t e m函数运行的命令继承了 S T D I N和S T D O U T文件描述符,因此,外部命
令执行输入/输出的位置与你的 P e r l程序执行输入/输出的位置是完全相同的。通过 s y s t e m函
数来调用完全交互式的程序是可能的。
请看下面这个在U N I X 下运行的代码例子:
现在再看在Wi n d o w s /D O S下运行的代码例子:
上面的每个例子都对 m y f i l e . t x t运行一个编辑器, U N I X 的编辑器是v i ,D O S 的编辑器是
e d i t 。当然编辑器是全屏幕运行的,所有的标准编辑器命令均能运行。当编辑器退出时,控制
权返回给P e r l 。
可以使用s y s t e m 函数运行任何程序,不只是控制台方式的程序(文本程序)。在U N I X 下,
下面这个例子运行一个图形时钟:
在D O S /Wi n d o w s下,下面这个例子用于启动一个图形文件编辑器:
基本的命
显示全部