Perl open

Perl 的open()函数有个挺好玩的用法,就是拿来做进程间通信(IPC)。用法上不复杂,像打开文件一样,就能和其他程序传数据,输入输出都能整。你只要在文件名参数里加个|,马上就能把输出重定向给别的命令,像lpr打印那种就合适。

重定向输出的时候,open(HANDLE, "| some_command")来启动子进程,用print把数据丢过去,close收尾。中间记得加点错误,比如die加上$!报错信息。写程序防出错,还是得多留心。

再厉害点的玩法,是把别人的输出接过来。open(HANDLE, "some_command |")可以读入命令结果,像抓netstat输出,一行行筛掉你不想看的。这样就能写出那种轻巧的系统工具脚本,效率也不错。

还有一点赞,Perl 支持动态拼命令字符串传给open(),意思就是你可以组合多个文件或命令来当数据源,比如"cmd1|""-f2 cmd2|"这种。这种方式多个输入来源时挺灵活的,搞点数据合并啥的实用。

,别忘了几个细节:管道断了要抓SIGPIPE,不然程序会突然挂掉;还有,命令写错的话,open()也看起来成功,其实根本没跑通,得靠close那一步或者检查$?才知道出问题。

如果你写 Perl 脚本比较多,尤其是要和系统命令打交道,这招真的蛮管用的。简单、灵活,还能省不少折腾子进程的代码。

pdf 文件大小:108.31KB