Halihallo coolblue
Hallo PHILIPP :-)
:-)
my $command = <$client>;
$command=chomp($command);Warum unbedingt chomp?
chomp ist der adäquate Befehl um den Delimiter (im Normalfall die
Newline) abzuschneiden. Adäquat deswegen weil Newline nicht umbedingt
der Delimiter für die IO-Operationen sein muss.
Genausogut könntest du z.B. folgendes tun:
use IO::String; # IO::Socket::INET ist nicht grossartig anders...
$/ = ';'; # INPUT_RECORD_SEPERATOR / Delimiter
my $s = IO::String->new('1;2;3;4');
# ^^^^^^^^ das wären dann deine $comment's halt
# eben mit ; getrennt statt mit Newlines
while ( my $rec = $s->getline() ) { # getline trennt jetzt bei ';'
my $rec2 = chomp($rec);
print "$rec ist '$rec', wohingegen $rec2 '$rec2' ist.\n";
}
Was wird bei den $rec2's ausgegeben? - Die ';' sind weg, weil chomp
eben auf $/ Rücksicht nimmt. Vielleicht entscheidest du dich
irgendwann deinen Server mit $comment's zu füttern, die über ';'
getrennt sind und nicht mit Newlines. Dann würde ein s/\n$//
jämmerlich versagen, da es eben nicht adäquat für die gewünschte
Funktionsweise ist.
Dieses Beispiel habe ich bisher oft in Foren und Beispielen geselesen, aber geht es denn auch nicht so:
my $command=<$client>;
$command=~s/\n//;
Solange der INPUT_RECORD_SEPERATOR ($/) die Newline ist, ja.
Performanter wäre hier jedoch $command =~ s/\n$//;
Da die Position von \n der RegExp-Engine bereits bekanntgegeben wird.
Was wäre daran falsch?
Bis auf den Umstand dass es performanter geschrieben werden kann und
der INPUT_RECORD_SEPERATOR nicht zwingend \n sein muss, nichts.
Zuviel Code?
Naja, die zwei drei Zeichen mehr...
Zu umständlich
Nicht adäquat würde ich als Grund angeben.
ist ja auch nur eine Zeile mehr (!) ?
Hä?
Oder mehr Rechenzeit - kann unter umständen wichtig sein (!) ?
Puh, das würde nur ein Benchmark beweisen können. Kannst es ja mal
testen:
perldoc Benchmark
Viele Grüsse
Philipp