ryker: Zähler zaubert Leerzeichen

Hallo erstmal,
folgendes Mysterium: Ich habe hier eine Reihe html-files zu korrigieren, was ich mit einen kleinen Perl-Script erledige. Dieses eigentlich sehr übersichtliche Ding baut aber aus irgendwelchen Gründen ein Leerzeichen an den Zeilenanfang. So sieht's aus:

open (TAGS, "$file")
@tags=<TAGS>;
close TAGS;

foreach (@tags)
{
 $i++;
 $cut=$i if ($_=~ m/$kriterium/);
}

splice (@tags,$cut,1,$new);

Schreibe ich nun @tags wieder zurück, befindet sich am Anfang jeder Zeile ein Leerzeichen -> NUR an der ersten nicht.
Woran mag das liegen?

Grüße
ryker

  1. folgendes Mysterium: Ich habe hier eine Reihe html-files zu korrigieren, was ich mit einen kleinen Perl-Script erledige. Dieses eigentlich sehr übersichtliche Ding baut aber aus irgendwelchen Gründen ein Leerzeichen an den Zeilenanfang. So sieht's aus:

    Du solltest dringend in deinem Skript use strict einbauen und die die Warnungen anzeigen lassen, entweder mit use warnings oder mit dem Schalter -w, denn so macht Fehlersuche keinen Sinn.

    Struppi.

    1. du wirst lachen-
      alles genauso vorhanden + keine warnungen auf der windows-kommandozeile.
      also?

      1. du wirst lachen-
        alles genauso vorhanden + keine warnungen auf der windows-kommandozeile.
        also?

        Das kann nicht sein, zumindest ist das was du uns zeigst so nicht lauffähig. Es wäre sinnvoller du würdest uns was zeigen womit sich dein Problem irgendwie nachvollziehen könnte.

        Struppi.

        1. Soso- wir wollen hier neuerdings komplette listings lesen. Ganz neue Charta, aber sei's drum:

          #!/usr/bin/perl -w
          use strict;
          my ($testfile, @tags, $cut, $kriterium, $new);

          $testfile="test.html";
          $kriterium="<tag>";
          $new="<newtag>";

          open (TAGS, "$testfile") || die ("file: $!\n");
          @tags=<TAGS>;
          close TAGS;

          foreach (@tags)
          {
           $i++;
           $cut=$i if ($_=~ m/$kriterium/);
          }
          splice (@tags,$cut,1,$new);

          open (NEW, ">$testfile") || die ("input: $!\n");
          print NEW "@tags";
          close NEW;

          Läuft übrigens lokal ohne Beteiligung irgendwelcher Server- und das auch problemlos, denn die neue Datei ist OK (bis auf ein Zeichen)- warum sollte Perl da warnen?
          Und: Zu was befähigt dich das jetzt?

          ryker

          1. Soso- wir wollen hier neuerdings komplette listings lesen. Ganz neue Charta, aber sei's drum:

            _Wir_ wollen gar nichts. Aber laß dich nicht stören.

            Struppi.

            1. possierlich,
              dir scheint sehr langweilig zu sein.
              (q.e.d.)

          2. Schönen guten Tag,

            foreach (@tags)
            {
            $i++;
            $cut=$i if ($_=~ m/$kriterium/);
            }

            Wo wird $i deklariert?

            Im übrigen:
            Du solltest Leuten die Dir hier freiwillig helfen wollen nicht derartig Respektlos gegenüber treten.
            Manchmal braucht man eben etwas mehr Code um den Fehler zu finden.
            Und du solltest die Konsole besser betrachten und die Fehler nach und nach beseitigen.

            Falls das Perl Script nach der Fehlerbeseitigung noch immer nicht laufen sollte melde dich nochmal.

            1. Ebenso schönen guten Tag,
              hab dein Posting leider zuerst übersehen...
              my $i ist hier beim Copy & Paste anscheinend durchgefallen, wird ordnungsgemäß deklariert und funktioniert- genau wie das Script insgesamt auch. Der auch mir schwer verständliche Witz nochmal: Das Output-File wird geschrieben, ist problemlos lesbar- es sind sozusagen "nur" zu viele Leerzeichen drin. Und weil mehrere Durchläufe anstehen, droht der Code dann unleserlich zu werden (weil bei jedem Durchlauf jeweils ein Satz Leerzeichen an jedem Zeilenanfang dazukommt).

              Im übrigen:
              Du solltest Leuten die Dir hier freiwillig helfen wollen nicht derartig Respektlos gegenüber treten.

              Tja- ein schneller Blick zwischen die Zeilen zeigt, dass die erste Respektlosigkeit in der Art&Weise begraben liegt. Habe ich hier ausnahmsweise mal beantwortet (hast du wirklich das Gefühl, dass hier jemand ernsthaft helfen wollte?).

              Beste Grüße
              ryker

              1. Schönen guten Tag,

                Der auch mir schwer verständliche Witz nochmal: Das Output-File wird geschrieben, ist problemlos lesbar- es sind sozusagen "nur" zu viele Leerzeichen drin. Und weil mehrere Durchläufe anstehen, droht der Code dann unleserlich zu werden (weil bei jedem Durchlauf jeweils ein Satz Leerzeichen an jedem Zeilenanfang dazukommt).

                Die von Perl vordefinierte Variable "$/" http://de.selfhtml.org/perl/sprache/vordefiniert.htm kann dir bei deinem Problem helfen.
                Übrigends solltest du dein Vorhaben mit dem Modul: "Tie::File" lösen, dort kannst du direkt in der Datei etwas verändern und musst es nicht auf dem umständlichen Weg (Datei öffnen, Dateiinhalt in ein Array schreiben, Array bearbeiten, Datei öffnen, Dateiinhalt überschreiben) machen.

                1. Nabend,
                  das sieht tatsächlich interessant aus- muss jetzt aber bis morgen warten ;-)

                  THX so far
                  ryker

              2. Tja- ein schneller Blick zwischen die Zeilen zeigt, dass die erste Respektlosigkeit in der Art&Weise begraben liegt.

                Oooch du Armer. Flenn doch!

                Struppi.