perl的一种进程的使用方法

在perl中当我们需要创建一个进程的时候,一般都是用比较简单易用的system,exec,或者``(反单引号),这几种用法都非常简单,但是他们不能结合一些操作系统中的管道等高效的东西。

所以在perl中还有一种创建进程的方法,就是把进程当做文件句柄那样使用。

open(WHOPROC, "who|"); # open who for reading

观察这句代码,当其中我们不写|的时候,who被认为是一个文件名,然后WHOPROC最终将是一个真实的文件句柄。
但当加上|的时候就表示将要开始一个命令。

当然,|可以在who的前面,也可以在后面。表达的意思也不一样。

当|在后面的时候,表示其前面的命令的的结果将会输出到前面的进程句柄里。而当|在命令前面的时候,表示前面的句柄是用来输入的,输入的数据将会被传给后面的命令。

举例说明:

(1)
  1. #! /usr/bin/perl -w
  2. open (FLIST,"dir | ");
  3. while(<FLIST>){
  4.    print $;
  5. }
如上面所讲,开始先执行dir命令,然后其结果将输出到FLIST,然后后面的循环将结果依次输出

(2)
  1. open(SEARCH,'| find "learning"');
  2. print SEARCH "learningPerl.pl";
  3. close(SEARCH);
如上所述,SEARCH将会传递数据到后面的命令。第二句中给SEARCH写入数据,则该数据将会作为参数传递给find命令。
然后运行。

下面以上述两种方法写一个综合的例子,以说明他们的好处。

  1. #! /usr/bin/perl -w
  2. print "Using Processes as Filehandles/n";
  3. open (FLS,"dir |");
  4. open (SEARCH,'| find "learning"');
  5. while(<FLS>){
  6.      print SEARCH $_;   
  7. }
  8. close(FLS);
  9. close(SEARCH);
首先dir的结果输出到FLS句柄里,然后SEARCH将会传递到find命令,在while循环里面将FLS的数据写入SEARCH,这是find命令以SEARCH句柄传递的数据作为参数执行,输出。

最后关闭两个句柄。

值得注意的是,当你不关闭句柄的时候,则你创建的进程有可能在你的perl进程结束的时候将不会退出,它将不受你的perl进程的控制。当我们使用close来关闭句柄,则你的perl进程将会等到你的进程安全退出的时候才会退出。

当然我们一次可以运行多个命令,
如open(WHOPR, "ls | tail -r |");


通过上面的这个例子,我们可以看到这种用法的方便之处,即完全可以通过管道来传递数据,或者得到结果,从而很方便的执行一系列操作,更高效,更方便。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值