perl的一種進程的使用方法

來源:互聯網
上載者:User
在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 |");

通過上面的這個例子,我們可以看到這種用法的方便之處,即完全可以通過管道來傳遞資料,或者得到結果,從而很方便的執行一系列操作,更高效,更方便。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.