我試圖編寫一些基本的聊天系統來學習perl。我試圖將聊天日誌寫入1個文件並在出現在chatlog.dat
文件中時顯示新消息,所以我寫了一個功能幾乎相同的東西,但是我遇到了一些問題並且不知道如何解決他們。 所以現在我有2個問題!linux下基於perl的基本聊天系統
我不明白如何保持
checkFile
功能始終處於激活狀態(如multiprocession)到新郵件當我試圖寫將追加新的消息出現此問題的連續檢查進入聊天日誌。口譯員等待我的輸入
my $newMessage = <STDIN>;
,但是,如果有人寫了一條新消息呢?它將不會顯示,直到他按下輸入...如何無效?my ($sec,$min,$hour) = localtime(); while(1){ my $userMessage = <STDIN>; last if $userMessage eq "::quit"; `echo "($hour:$min:$sec): $userMessage" >>chatlog.dat`; } sub checkFile{ my $lastMessage = ""; my $newMessage = ""; while (1) { my $context = `cat chatlog.dat`; split(/\n/, $context); $newMessage = $_[$#_]; if ($newMessage ne $lastMessage) { print $newMessage; $lastMessage = $newMessage; } } }
那就是'select'循環是。使用IO :: Select更容易,但仍然非常複雜。更簡單的使用線程。 – ikegami 2014-09-29 16:43:33
您也正處於種族競爭狀態 - 如果您連續發送兩封郵件,則只會打印第二封郵件。 – Sobrique 2014-09-29 19:00:02
@Sobrique是啊,這是第三個問題,但它沒有高優先級,至少我可以添加時間選項到聊天日誌,所以新打印的消息會有另一個時間,因此它將被視爲一個新消息 – PYPL 2014-09-29 19:09:40