Lude: "Trimmen" von Skalaren

Hi,

wie trimmt man ein Skalar, also statt
 ' Harry ist doof     '
 'Harry ist doof'
?

Gruss,
Lude

--
"Gemoppt wird aus Berlin."
  1. Direkt weiß ich's auch nicht. Ein Workaround wäre aber:

    $text = '  Harry ist doof    ';

    $text =~ s/^\s*//;
    $text =~ s/\s*$//;

    Hi,

    wie trimmt man ein Skalar, also statt
    ' Harry ist doof     '
    'Harry ist doof'
    ?

    Gruss,
    Lude

    1. Hallo Andreas,

      $text = '  Harry ist doof    ';

      $text =~ s/^\s*//;
      $text =~ s/\s*$//;

      Statt dem Asterix besser ein Plus. Ein * verlangsamt die Ausdrücke unnötig. Zum Vergleich:
      ckruse@sunshine:~ $ cat test.pl
      #!/usr/bin/perl -w

      use strict;
      use Benchmark qw(timethese);

      my $data = (' ' x 10000).'Blub blahr blub'.(' ' x 10000);

      timethese(1000000,{
          oplus => sub {
            $data =~ s/^\s+//o;
            $data =~ s/\s+$//o;
          },
          plus => sub {
            $data =~ s/^\s+//;
            $data =~ s/\s+$//;
          },
          normal => sub {
            $data =~ s/^\s*//;
            $data =~ s/\s*$//;
          }
        }
      );

      ckruse@sunshine:~ $ perl test.pl
      Benchmark: timing 1000000 iterations of normal, oplus, plus...
          normal:  4 wallclock secs ( 3.63 usr +  0.01 sys =  3.64 CPU) @ 274725.27/s (n=1000000)
           oplus:  2 wallclock secs ( 1.23 usr +  0.00 sys =  1.23 CPU) @ 813008.13/s (n=1000000)
            plus:  0 wallclock secs ( 1.19 usr +  0.00 sys =  1.19 CPU) @ 840336.13/s (n=1000000)
      ckruse@sunshine:~ $

      Interessant dabei finde ich, dass das Beispiel gut zeigt, dass das o-Flag eine
      zweischneidige Sache ist. Es kann Code schneller, aber auch langsamer machen. Die perldoc
      sagt dazu, dass komplizierte Ausdrücke oft mit dem o-Flag schneller sind aber einfache
      Ausdrücke dagegen oft mit ohne o-Flag. *Sehr* bezeichnend finde ich, wie extrem viel
      langsamer der *-Ausdruck ist. Aber eigentlich logisch. Ich habe mal die Automaten zu den
      Ausdrücken aufgezeichnet:

      <img src="http://www.defunced.de/pics/automat1.png" border="0" alt="">

      Daraus wird ersichtlich, dass der erste Ausdruck finit ist, während der zweite Ausdruck in
      einem infiniten Automaten endet. Das bedeutet, dass die RegEx-Engine erst erkennen muss,
      dass sie in einer Endlos-Schleife gelandet ist, bis der Audruck zwangs-terminiert wird.

      Hm, interessantes Thema, vielleicht sollte ich mal einen FA darüber schreiben.

      Grüße,
       CK

      --
      Ihr wisst nicht, wie man den Menschen dient. Wie sollt ihr wissen, wie man den Goettern dienen soll?
      1. Tach nochmal,

        [...] Asterix [...]

        Ich meinte natürlich Asterisk ;-)

        Grüße,
         CK

        --
        Wenn auf Erden alle das Schoene als schoen erkennen, so ist dadurch schon das Haessliche bestimmt.
      2. Wow, mußt Du eine Langeweile haben... ;-)

        Hallo Andreas,

        $text = '  Harry ist doof    ';

        $text =~ s/^\s*//;
        $text =~ s/\s*$//;

        Statt dem Asterix besser ein Plus. Ein * verlangsamt die Ausdrücke unnötig. Zum Vergleich:
        ckruse@sunshine:~ $ cat test.pl
        #!/usr/bin/perl -w

        use strict;
        use Benchmark qw(timethese);

        my $data = (' ' x 10000).'Blub blahr blub'.(' ' x 10000);

        timethese(1000000,{
            oplus => sub {
              $data =~ s/^\s+//o;
              $data =~ s/\s+$//o;
            },
            plus => sub {
              $data =~ s/^\s+//;
              $data =~ s/\s+$//;
            },
            normal => sub {
              $data =~ s/^\s*//;
              $data =~ s/\s*$//;
            }
          }
        );

        ckruse@sunshine:~ $ perl test.pl
        Benchmark: timing 1000000 iterations of normal, oplus, plus...
            normal:  4 wallclock secs ( 3.63 usr +  0.01 sys =  3.64 CPU) @ 274725.27/s (n=1000000)
             oplus:  2 wallclock secs ( 1.23 usr +  0.00 sys =  1.23 CPU) @ 813008.13/s (n=1000000)
              plus:  0 wallclock secs ( 1.19 usr +  0.00 sys =  1.19 CPU) @ 840336.13/s (n=1000000)
        ckruse@sunshine:~ $

        Interessant dabei finde ich, dass das Beispiel gut zeigt, dass das o-Flag eine
        zweischneidige Sache ist. Es kann Code schneller, aber auch langsamer machen. Die perldoc
        sagt dazu, dass komplizierte Ausdrücke oft mit dem o-Flag schneller sind aber einfache
        Ausdrücke dagegen oft mit ohne o-Flag. *Sehr* bezeichnend finde ich, wie extrem viel
        langsamer der *-Ausdruck ist. Aber eigentlich logisch. Ich habe mal die Automaten zu den
        Ausdrücken aufgezeichnet:

        <img src="http://www.defunced.de/pics/automat1.png" border="0" alt="">

        Daraus wird ersichtlich, dass der erste Ausdruck finit ist, während der zweite Ausdruck in
        einem infiniten Automaten endet. Das bedeutet, dass die RegEx-Engine erst erkennen muss,
        dass sie in einer Endlos-Schleife gelandet ist, bis der Audruck zwangs-terminiert wird.

        Hm, interessantes Thema, vielleicht sollte ich mal einen FA darüber schreiben.

        Grüße,
        CK

        1. Hallo Andreas,

          Wow, mußt Du eine Langeweile haben... ;-)

          Nein, nur Interesse.

          Grüße,
           CK

          --
          Fatal! Ich kann kein Reserve-Offizier mehr sein!
          1. Hi,

            Wow, mußt Du eine Langeweile haben... ;-)

            Nein, nur Interesse.

            so viel Interesse haben aber nur die Besten der Besten der Besten oder recht einfache Trolle. Ueblicherweise.

            Gruss,
            Lude

            --
            "Gemoppt wird aus Berlin."
            1. Hallo Lude,

              Wow, mußt Du eine Langeweile haben... ;-)

              Nein, nur Interesse.

              so viel Interesse haben aber nur die Besten der Besten der Besten oder recht einfache Trolle.
              Ueblicherweise.

              Und was willst du mir damit sagen?

              Grüße,
               CK

              --
              Der Verstand ist der Hausherr, der Koerper sein Gast.
              1. Hi,

                Wow, mußt Du eine Langeweile haben... ;-)
                Nein, nur Interesse.
                so viel Interesse haben aber nur die Besten der Besten der Besten oder recht einfache Trolle.
                Ueblicherweise.
                Und was willst du mir damit sagen?

                ich wollte Deine Coolness testen. Sonst gehst Du ja schon mal hoch wie der Pruegelprinz.

                Weiterhin viel Erfolg,
                Gruss,
                Lude

                --
                "Gemobbt wird aus Berlin."
                1. Hallo Lude,

                  Und was willst du mir damit sagen?

                  ich wollte Deine Coolness testen. Sonst gehst Du ja schon mal hoch wie der Pruegelprinz.

                  Unterlasse sowas bitte. Danke.

                  Grüße,
                   CK

                  --
                  "Ich muss auflegen, mein Essen ist gleich fertig."
                  "Oh, was gibt 's denn?"
                  "Hmm. Die Packung liegt schon im Muell, keine Ahnung.
                  1. Hi, CK,

                    Und was willst du mir damit sagen?
                    ich wollte Deine Coolness testen. Sonst gehst Du ja schon mal hoch wie der Pruegelprinz.
                    Unterlasse sowas bitte. Danke.

                    Moment, das ist mir aber ganz ganz wichtig. Wenn Du wieder anfaengst zu stammeln, ich sei ein Troll, dann missfiele mir das aber zutiefst.
                    Also unterlasse Dich bitte.

                    Gruss,
                    Lude

                    --
                    "Wer nicht kaempft, hat schon gewonnen."
  2. Hi,

    wie trimmt man ein Skalar, also statt
     ' Harry ist doof     '
     'Harry ist doof'
    ?

    Das ist eine FAQ.

    perlfaq4 - Data Manipulation

    How do I strip blank space from the beginning/end of a string?

    Struppi.

  3. Hi Lude,

    wie trimmt man ein Skalar, also statt
     ' Harry ist doof     '
     'Harry ist doof'
    ?

    ist nicht schwierig, klick:
    http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.7.2.4

    entfernt auch Tabulatoren.

    Gruss aus Linkenheim, Rolf

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?