Philipp Hasenfratz: Eine letzte Frage... hoffentlich :-)

Beitrag lesen

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

0 47

Socket, system und Prozess in den Hintergrund schicken

coolblue
  • perl
  1. 0

    Einen Schritt weiter

    coolblue
    1. 0
      Philipp Hasenfratz
      1. 0
        coolblue
        1. 0
          Philipp Hasenfratz
          1. 0
            coolblue
            1. 0
              Philipp Hasenfratz
              1. 0

                Eine letzte Frage... hoffentlich :-)

                coolblue
                1. 0
                  Philipp Hasenfratz
                  1. 0
                    coolblue
                    1. 0
                      Philipp Hasenfratz
                      1. 0

                        Der wirklich letzte ... :-)

                        coolblue
                        1. 0
                          Philipp Hasenfratz
                  2. 0

                    CHOMP funktioniert nicht... was mache ich falsch?

                    coolblue
                    1. 0
                      Philipp Hasenfratz
                      1. 0
                        coolblue
                2. 0
                  Struppi
                  1. 0
                    coolblue
                    1. 0
                      EisFux
                      1. 0
                        coolblue
                        1. 0
                          Struppi
                          1. 0

                            Absolut klasse !

                            coolblue
                            1. 0
                              Philipp Hasenfratz
                              1. 0
                                coolblue
                              2. 0
                                coolblue
                                1. 0
                                  Philipp Hasenfratz
                                  1. 0
                                    coolblue
                          2. 0
                            Philipp Hasenfratz
                            1. 0

                              Benchmark, "chomp"-Lösungen

                              Philipp Hasenfratz
                              1. 0
                                coolblue
                                1. 0
                                  Philipp Hasenfratz
                                  1. 0
                                    coolblue
                            2. 0
                              Struppi
                      2. 0
                        Philipp Hasenfratz
                        1. 0
                          coolblue
                          1. 0
                            Philipp Hasenfratz
                            1. 0
                              coolblue
                            2. 0

                              Fehler im Forum nachträglich korrigieren

                              EisFux
                              • zu diesem forum
                              1. 0
                                Christian Kruse
                          2. 0
                            EisFux
                        2. 0
                          EisFux
                          1. 0
                            Philipp Hasenfratz
                            1. 0
                              Philipp Hasenfratz
  2. 0
    Philipp Hasenfratz
    1. 0
      coolblue
      1. 1
        Philipp Hasenfratz
        1. 0
          coolblue