2011-09-21 96 views
1

誰能告訴我爲什麼firefox不打開與下面的Net :: HTTPServer線添加?

#!/usr/bin/perl 
# v5.10.1/linux 
use strict; 
use warnings; 
use Shell; 
use Net::HTTPServer; 


############ section ############### 
my $server = new Net::HTTPServer(
           port=>5000, 
           docroot=>"/home/frank/Perl/perl_info_pages", 
           log => "/home/frank/Perl/perl_info_pages/access.log", 

           chroot => 0,  #  - Run the server behind a virtual chroot(). 
           # Since only root can actually call chroot, 
           # a URL munger is provided that will not 
           # allow URLs to go beyond the document root 
           # if this is specified. 
           # (Default: 1)/true ??? 

           # allow only for localhost... and user *** 
           # super server daemon control of?? 
           # cgi... 
           ); 

$server->Start(); 
$server->Process(); 
############# end of section ################### 

# can anyone tell me why these lines work(to open up firefox) with the above section commented out, but do not work when they are uncommented?? 
my $linkurl = 'http://localhost:5000'; 
firefox ("$linkurl"); 
+0

取而代之的是什麼?這是Perl腳本的最後一行嗎?你是否定義了一個'firefox'函數? –

+0

是的最後一行是我的腳本的一部分。我認爲「使用殼牌;」是它工作所需要的(我沒有爲它定義的函數)。 – Carpenter

回答

1

作爲解釋到的HttpServer文檔中,Process()呼叫阻塞和無限期地運行服務器,因此最後兩行從來沒有達到過。

您可以做的最簡單的事情是在StartProcess之間產生Firefox進程:套接字已經被創建,並且當進程派生代碼將返回時服務器將開始運行。

+0

謝謝,這些意味着我必須分叉或線程服務器部分?對不起,我希望這是可以問的嗎? – Carpenter

+0

可以這樣做,或者簡單地在'開始'之後創建Firefox進程。 –

1

Net::HTTPServerProcess方法永遠不會返回,除非您給它超時。如果要打印消息,則必須在調用Process之前執行此操作。如果你想知道服務器綁定到什麼端口,你可以在開始之後執行它。