Sto cercando di scrivere un sistema di chat di base solo per imparare perl. Sto cercando di ottenere il chatlog in un file 1 e di stampare un nuovo messaggio se appare nel file chatlog.dat
, quindi ho scritto una funzione che fa quasi la stessa cosa, ma ho alcuni problemi e non so come risolvere loro. Quindi ora ho 2 problemi!sistema di chat di base su perl sotto linux
non riuscivo a capire come mantenere
checkFile
funzione sempre attiva (come multiprocession) per controllare continuamente di nuovi messaggiQuesto problema si verifica quando sto cercando di scrivere un nuovo messaggio che verrà aggiunto nel chatlog. L'interprete attende il mio intervento sulla linea
my $newMessage = <STDIN>;
, ma, se qualcuno scrive un nuovo messaggio? non verrà mostrato fino a quando non premerà Invio ... come annullarlo?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; } } }
Questo è ciò che 'loop select' sono per. Semplificato usando IO :: Select, ma ancora estremamente complicato. Più semplice con i thread. – ikegami
State anche costruendo in una condizione di competizione - se si inviano due messaggi in successione, si stampa solo il secondo. – Sobrique
@Sobrique sì, questo è il terzo problema ma non ha alta priorità ANCORA, almeno posso aggiungere l'opzione tempo nel chatlog in modo che il messaggio appena stampato abbia un'altra volta, quindi sarà considerato come un NUOVO messaggio – PYPL