Klar dass das nicht funktioniert: Der zweite Thread wird nie erzeugt und nie gestartet, denn in Zeile 7 steht
threads->new(\&test2()), also ein
Aufruf von
test2, dessen Rückgabewert referenziert und an
threads::new übergeben werden soll, was aber nie passiert, denn
test2 kehrt niemals zurück und so werden weder der zweite Aufruf von
threads::new noch die Schleife im Hauptthread jemals erreicht. Stattdessen ist sicherlich
threads->new(\&test2) gemeint, also die Übergabe einer
Referenz auf die Subroutine test2 selbst.
Abgesehen davon erscheint auch Zeile 18 fehlerhaft, denn gemeint ist vermutlich nicht
my $thread = @_, also die Zuweisung der Anzahl von Argumenten an die Variable
$thread, sondern
my ($thread) = @_, also die Zuweisung des ersten Argumentes an die Variable
$thread.
So könnte man sich dann auch die Subroutine
test2 komplett sparen und statt Zeile 6 und 7 einfach
my $thread1= threads->new(\&test, "Erster Thread")->detach();
my $thread2= threads->new(\&test, "Zweiter Thread")->detach();
schreiben.
When C++ is your hammer, every problem looks like your thumb.