coolblue: Ein Element aus einem Array entfernen

Hallo,

wie entfernt man optimaler Weise ein Element aus einem Array.
Ich weiß das es zum Leeren eines Skalars zwei Möglichkeiten gibt.

1. undef $skalar;
2. $skalar="";

Bisher habe ich die Option undef vorgezogen, weil vermutlich der Speicherplatz ans System freigegeben wird, denn mit $skalar=""; weise ich ja nur einen neuen Wert zu, bin mir dessen aber nicht sicher. Trifft dies auch für ein Array zu oder wird jegliche Entität des Elements gelöscht, damit meine ich das ganze Array?

Für Hilfe wäre ich dankbar.

Viele Grüße,
coolblue

--

never say oops after you submitted a job :-)
_der_Ton_macht_die_Musik_!!!_
  1. Hallo,

    wie entfernt man optimaler Weise ein Element aus einem Array.
    Ich weiß das es zum Leeren eines Skalars zwei Möglichkeiten gibt.

    1. undef $skalar;
    2. $skalar="";

    Bisher habe ich die Option undef vorgezogen, weil vermutlich der Speicherplatz ans System freigegeben wird, denn mit $skalar=""; weise ich ja nur einen neuen Wert zu, bin mir dessen aber nicht sicher. Trifft dies auch für ein Array zu oder wird jegliche Entität des Elements gelöscht, damit meine ich das ganze Array?

    Für Hilfe wäre ich dankbar.

    Viele Grüße,
    coolblue

    Nachtrag: ich möchte nicht mit shift arbeiten, da der Index eine feste Struktur besitzt und shift die Elemente an eine falsche Position rücken würde.

    Viele Grüße,
    coolblue

    --

    never say oops after you submitted a job :-)
    _der_Ton_macht_die_Musik_!!!_
  2. 你好 coolblue,

    wie entfernt man optimaler Weise ein Element aus einem Array.
    Ich weiß das es zum Leeren eines Skalars zwei Möglichkeiten gibt.

    1. undef $skalar;
    2. $skalar="";

    Bisher habe ich die Option undef vorgezogen, weil vermutlich der
    Speicherplatz ans System freigegeben wird, denn mit $skalar=""; weise
    ich ja nur einen neuen Wert zu, bin mir dessen aber nicht sicher.

    Nein, Perl5 gibt den Speicher erst frei, wenn der Interpreter beendet wird.

    Wenn du ein Element eines Arrays loeschen willst, schau dir die Funktion
    “splice” an.

    再见,
     CK

    --
    Wer sich zu überschwänglich freut, wir später Grund zum Weinen haben.
    http://wwwtech.de/
    1. Hallo Christian,

      Wenn du ein Element eines Arrays loeschen willst, schau dir die Funktion
      “splice” an.

      Habe ich, aber ich brauche wohl ein Anwendungsbeispiel.

      Simples Beispiel:

      $array[0]="Hallo";
      $array[1]="Herr";
      $array[2]="Christian Kruse";
      $array[3]="Kruse";
      $array[4]="Wie geht es Ihnen?";

      Ich möchte die Elemente mit Index 1-3 Löschen und den Speicher ans System wieder frei geben. Wie mache ich das genau?

      Viele Grüße,
      coolblue

      --

      never say oops after you submitted a job :-)
      _der_Ton_macht_die_Musik_!!!_
      1. perldoc -fsplice

        Bert

        --
        E492: Not an editor command: Wq
        ln -s /dev/brain
        Selbst ist der Mann, wenn er sich verdoppeln kann
  3. Hallo coolblue,

    wie entfernt man optimaler Weise ein Element aus einem Array.

    Bisher habe ich die Option undef vorgezogen, weil vermutlich der Speicherplatz ans System freigegeben wird, denn mit $skalar=""; weise ich ja nur einen neuen Wert zu, bin mir dessen aber nicht sicher. Trifft dies auch für ein Array zu oder wird jegliche Entität des Elements gelöscht, damit meine ich das ganze Array?

    Was hast du nur immer mit dem Speicherplatz? Darum kümmert sich die Perl-Laufzeitmgebung schon selbst. Mit undef() wird zwar die Variable für den Perl-Code gelöscht (will sagen: der Zeiger darauf wird zurückgesetzt), aber ob der Speicher freigegeben wird (für andere Prozesse), darauf hast du hier keinen Einfluss. (Leider :( )

    Für Hilfe wäre ich dankbar.

    SelfHTML ist mehr als ein Forum ;-)
    splice()
    http://de.selfhtml.org/cgiperl/funktionen/listenhashes.htm#splice

    und falls du es doch nochmal mit undef() probieren willst:
    http://de.selfhtml.org/cgiperl/funktionen/listenhashes.htm#undef

    Viele Grüße,
    EisFuX

    1. Hallo EisFux,

      Was hast du nur immer mit dem Speicherplatz? Darum kümmert sich die Perl-Laufzeitmgebung schon selbst.

      Perl der Allmächtige kümmert sich um alles *g*

      Warum programmiere ich dann noch überhaupt? Warum sollte ich Deklarieren, warum sollte ich denn nicht in einer while Schleife endlos Subshells öffnen..., wenn Perl alles für mich händelt??? Ich mache mir Gedanken um meine Ressourcen und über die anderen 1200 Benutzer, die auf der gleichen Maschine arbeiten!!! Alleine der Perl-Laufzeitumgebung alles zu überlassen, ist, so denke ich, der falsche Ansatz.

      Soll ich denn ein 50 MB großes Element einfach im Speicher liegen lassen, obwohl es zunächst nicht mehr gebraucht wird, der Prozess aber weiterin läuft... nonstop?

      Und noch immer weiß ich nicht wie es funktioniert. Ich suche dann mal fleißig weiter :-)

      Danke.

      Viele Grüße,
      coolblue

      --

      never say oops after you submitted a job :-)
      _der_Ton_macht_die_Musik_!!!_
      1. 你好 coolblue,

        Warum programmiere ich dann noch überhaupt?

        Ja, den Sarkasmus kannst du auch getrost weglassen. Niemand hat gesagt, du
        sollst verschwenderisch mit den Ressourcen umgehen. Es wurde nur gesagt,
        dass man auf die Speichernutzung geringen bis keinen Einfluss
        hat -- wenn du es anders moechtest, benutze Sprachen wie C oder Pascal.

        Soll ich denn ein 50 MB großes Element einfach im Speicher liegen
        lassen, obwohl es zunächst nicht mehr gebraucht wird, der Prozess
        aber weiterin läuft... nonstop?

        Beschaeftige dich mal mit Technologien wie Speicherverwaltung mit Hilfe
        von Reference Counting. Perl merkt schon, wenn du den Array nicht mehr
        verwendest -- es sei denn, du machst ganz wilde, zirkulaere Konstrukte
        (wobei nicht klar ist, ob in dem Fall Perl die Referenzen “von Hand”
        aufbricht, dazu muesste man sich den Sourcecode angucken).

        再见,
         CK

        --
        Sein oder nicht sein, das ist hier die Frage!
        http://wwwtech.de/
        1. Hallo Christian,

          Ja, den Sarkasmus kannst du auch getrost weglassen.

          es war weder Sarkasmus noch unfreundlich. Eher freundliche Ironie! Ich habe eine Frage gestellt und erwarte eigentlich eine Anwort darauf, stattdessen erhalte selber sarkastische bzw. sinnlose Antworten!

          Perl merkt schon, wenn du den Array nicht mehr verwendest --

          Du scheinst auch zu der Sorte zu gehören, die nur Unsinn von sich geben können! Ich versuche ein Projekt in Perl zu entwickeln und nicht in C oder einer anderen Sprache. Welche Aspekte mich dazu führen, muss ich hier doch nicht erläutern! Jeder backt halt sein eigenes Brot und da niemand sonst hier ausser ich den Code kennt, den ich schreibe, wäre es doch viel einfacher, mir insoweit behilflich zu sein, indem man einfach meine Frage beantwortet, anstatt wilde Spekulationen zu beginnen.

          Lies doch demnächst einfach über meine Threads hinweg, wenn sie dich stören. Danke.

          Viele Grüße,
          coolblue

          --

          never say oops after you submitted a job :-)
          _der_Ton_macht_die_Musik_!!!_
          1. 你好 coolblue,

            *rotfl* jetzt weiss ich ja, wie ich dich einordnen muss.

            再见,
             CK

            --
            Death is God's way of telling you not to be such a wise guy.
            http://wwwtech.de/
            1. Hallo Christian.

              Nun ja, ordne mich ein wie du magst, das machen wir sowieso alle. Aber dabei frech zu werden, ist nicht nett. Tu ich doch auch nicht. Hab immer ein :-) auf den Lippen. Ich bin hier, um Wissen und Erfahrungen auszutauschen, nicht um Andere abzuwerten oder die Art von Ratschlägen zu erteilen, mit denen ich ihnen Dummheit vorschmeisse.

              Also Christian, gibt es jetzt eine Möglichkeit, ein Element eines Array genau zu dem Zeitpunkt zu leeren, wenn ich es möchte und nicht "Perl"? Und so das der Speicher ebenfalls für das System freigegeben wird.

              Um Hilfe wäre ich weiterhin dankbar.

              Viele Grüße,
              coolblue

              --

              never say oops after you submitted a job :-)
              _der_Ton_macht_die_Musik_!!!_
              1. 你好 coolblue,

                Nun ja, ordne mich ein wie du magst, das machen wir sowieso alle.
                Aber dabei frech zu werden, ist nicht nett.

                Schatzi, fass dich mal an die eigene Nase. Frech geworden bist du hier,
                ich habe dir lediglich begreiflich gemacht, dass du keine Gewalt ueber
                das Speichermanagement von Perl hast und dir Hinweise auf weiterfuehrende
                Literatur gegeben. Wenn dir das nicht passt, ueberlies es doch einfach.

                Also Christian, gibt es jetzt eine Möglichkeit, ein Element eines
                Array genau zu dem Zeitpunkt zu leeren, wenn ich es möchte und nicht
                "Perl"? Und so das der Speicher ebenfalls für das System freigegeben wird.

                Lies mein Posting.

                Egal, EOT und EOD fuer mich, von nun an werde ich dich ignorieren.

                再见,
                 CK

                --
                Beware Evildoers for my deed is done and every little damsel in distress will be shelted!
                http://wwwtech.de/
                1. Hallo,

                  Schatzi, fass dich mal an die eigene Nase. Frech geworden bist du hier,

                  hmmm, wie man in den Wald ruft, so schallt es auch heraus! Ist zwar nicht richtig was du schreibst, aber ok, du wirst mich ignorieren. Passt mir sehr gut. Danke.

                  Falls du doch mal einen wirklich hilfreichen Kommentar loswerden willst, ist er gerne willkommen. Bezüglich des Reference Counting werde ich mich schlau machen.

                  Viele Grüße,
                  coolblue

                  --

                  never say oops after you submitted a job :-)
                  _der_Ton_macht_die_Musik_!!!_
          2. Ja, den Sarkasmus kannst du auch getrost weglassen.

            es war weder Sarkasmus noch unfreundlich. Eher freundliche Ironie! Ich habe eine Frage gestellt und erwarte eigentlich eine Anwort darauf, stattdessen erhalte selber sarkastische bzw. sinnlose Antworten!

            Nein, die Antwort ist genau das was auf deine Frage einen Sinn ergibt.

            Perl merkt schon, wenn du den Array nicht mehr verwendest --

            Du scheinst auch zu der Sorte zu gehören, die nur Unsinn von sich geben können! Ich versuche ein Projekt in Perl zu entwickeln und nicht in C oder einer anderen Sprache. Welche Aspekte mich dazu führen, muss ich hier doch nicht erläutern! Jeder backt halt sein eigenes Brot und da niemand sonst hier ausser ich den Code kennt, den ich schreibe, wäre es doch viel einfacher, mir insoweit behilflich zu sein, indem man einfach meine Frage beantwortet, anstatt wilde Spekulationen zu beginnen.

            Wenn du in deinem Code 50 MB einliest wirst du sicher einen Grund dafür haben, wenn du diese nicht global benutzt ist der Rest kein Problem für dich. Darum kümmert sich Perl.

            das hat nichts mit Allmächtig oder sonstwas zu tun, sondern in Perl brauchst du dich um solche Dinge wie Speicherveraltung nicht zu kümmern. Das kann unter gewissen Umständen sicher von Nachteil sein, in 99.99% der Fälle ist es nützlich und nimmt dir enorm Arbeit ab. wenn du der Meinung bist deine Anwendung gehört zu den wenigen Fällen in denen du Kontrolle über den Speicher haben musst, ist Perl definitiv die falsche Programmiersprache. Da es diese Möglichkeit nicht gibt.

            Das hat nichts mit wilder Spekulation zu tun, sondern es hängt mit deiner Fragestellung zusammen. Du fragst, bekommst eine Antwort und willst dich aber nicht damit zufrieden geben, sondern bist immer noch der Meinung das deine Frage nicht beantwortet wurde, obwohl bereits geschehen und zwar hier https://forum.selfhtml.org/?t=95854&m=582459
            um das zu präzisieren, es spielt keine Rolle ob du undef $var oder $var = undef schreibst, der Speicher wird nicht frei gegeben. Im ersten Falle existiert die Referenz auf $var nicht mehr im zweiten die Referenz auf den Inhalt. aber ob und wann der Speicher freigegeben wird hängt von anderen Faktoren ab, die in Perl nicht beeinflußbar sind.

            Struppi.

            1. Halli hallo Struppi,

              hoffentlich fängst du jetzt nicht auch noch so an!

              sondern bist immer noch der Meinung das deine Frage nicht beantwortet wurde, obwohl bereits geschehen und zwar hier https://forum.selfhtml.org/?t=95854&m=582459

              Die Antwort habe ich akzeptiert, dass hatte ich doch geschrieben! Nur war sie für mich nicht ausreichend... ein gutes Recht meinerseits, oder etwa nicht?

              um das zu präzisieren, es spielt keine Rolle ob du undef $var oder $var = undef schreibst, der Speicher wird nicht frei gegeben.

              Soetwas ist eine präzise Antwort, was nicht heißen soll, dass ich nicht gerne spekuliere.

              Ja, den Sarkasmus kannst du auch getrost weglassen.

              Aber ich finde es einfach ätzend, dass in den meisten Threads hier zunächst mit dem bösen Finger auf jemanden gezeigt wird. Find ich nicht ok und von dieser Meinung werde ich auch nicht zurücktreten, auch wenn du nun Partei ergreifst. Mag zwar solidarisch sein, ist aber trotzdem falsch. Das ich im nachhinein selber unfreundlich werde, dafür entschuldige ich mich!

              Thema beendet? Danke.

              Viele Grüße,
              coolblue

              --

              never say oops after you submitted a job :-)
              _der_Ton_macht_die_Musik_!!!_
              1. hoffentlich fängst du jetzt nicht auch noch so an!

                nö, hatte ich nicht vor.

                sondern bist immer noch der Meinung das deine Frage nicht beantwortet wurde, obwohl bereits geschehen und zwar hier https://forum.selfhtml.org/?t=95854&m=582459

                Die Antwort habe ich akzeptiert, dass hatte ich doch geschrieben! Nur war sie für mich nicht ausreichend... ein gutes Recht meinerseits, oder etwa nicht?

                Klar, aber nach wie vor ist es hier gerne gesehen ein bisschen Eigeninitiative zu leisten und mit ein bisschen Suchen wäre vielleicht sogar ...

                um das zu präzisieren, es spielt keine Rolle ob du undef $var oder $var = undef schreibst, der Speicher wird nicht frei gegeben.

                Soetwas ist eine präzise Antwort, was nicht heißen soll, dass ich nicht gerne spekuliere.

                .. was besseres und genaueres rausgekommen, da meine Kenntnisse über Perl interna nicht wirklich gut sind.

                Ja, den Sarkasmus kannst du auch getrost weglassen.

                Aber ich finde es einfach ätzend, dass in den meisten Threads hier zunächst mit dem bösen Finger auf jemanden gezeigt wird. Find ich nicht ok und von dieser Meinung werde ich auch nicht zurücktreten, auch wenn du nun Partei ergreifst. Mag zwar solidarisch sein, ist aber trotzdem falsch. Das ich im nachhinein selber unfreundlich werde, dafür entschuldige ich mich!

                eine Diskussion die hier immer wieder gerne geführt wird und es gibt auch sehr unterschiedliche Aufassungen darüber wie es vermittelt wird. Aber eine der positiven Ansätze (neben viel Wissen ;-) ) ist der, das das selfforum kein Supportforum sein soll. Also wenn du was wissen willst wirst du hier oft nur mit Hinweisen gefüttert, die dir helfen mehr über deine Frage und die Antworten rauszufinden. Was letzlich auch für dich von Vorteil ist, denn keiner wird dir umfassend hier Antworten können oder wollen, zumal bei Themen die umfangreicheres Wissen erfordern. Dafür existieren im Netz vielfältige Quellen.

                Thema beendet? Danke.

                Ich hab alles gesagt, was ich sagen konnte. wenn ich du mehr Wissen willst, müßte ich googlen, aber ich zweifle nicht daran das du dazu nicht selber in der Lage wärst.

                Struppi.

                1. Hiho Struppi,

                  Ich hab alles gesagt, was ich sagen konnte. wenn ich du mehr Wissen willst, müßte ich googlen, aber ich zweifle nicht daran das du dazu nicht selber in der Lage wärst.

                  hmmm... googlen tu' ich schon viel zu viel :-)

                  Ich habe ja immer die hoffnung, dass jemand meine Frage gezielt beanworten kann. Ok bis dann. Ich google dann mal.

                  Viele Grüße,
                  coolblue

                  --

                  never say oops after you submitted a job :-)
                  _der_Ton_macht_die_Musik_!!!_
                  1. Hiho coolblue,

                    <insert>
                    Vorsorglicher Grinsesmiley: ;-)
                    </insert>

                    Ich habe ja immer die hoffnung, dass jemand meine Frage gezielt beanworten kann. Ok bis dann. Ich google dann mal.

                    Gezielte Beantwortung setzt gezieltes Fragen voraus:
                    Dein gewähltes Thread-Thema lautete:

                    (PERL) Ein Element aus einem Array entfernen

                    In Wirklichkeit wolltest du aber wissen, wie Großmeister Perl (;-)) intern den Speicher für seine Variablen verwaltet, richtig?

                    Das Problem hierbei, liegt erstens in der unglücklichen Wahl der Überschrift (deinerseits -- aber bitte nicht hauen ...). Und zweitens ist dieses Forum hier vor allem für Web-(-Design, -Mastering, -Programming, -...)-Probleme geschaffen worden, auch wenn hier schon mal Fragen zu Optionsscheinen und Einstiegsgehältern von Junginformatikern vorkommen. Deine Fragen beziehen sich ja eher auf Laufzeitverhalten und Code-Optimierung (für Compiler), und ich glaube, da wärst du mit C(++) oder Assembler besser bedient.

                    hmmm... googlen tu' ich schon viel zu viel :-)

                    Hast du schon mal in die PODs zu den Perl-Modulen B und O geschaut? Zumindest werden dort einige Interna des Perl-Systems angesprochen.

                    Viele Grüße,
                    EisFuX

                    P.S. Füchse lächeln nicht ;-). Ich glaube, dass ist bei denen anatomisch nicht möglich.

                    1. Grinseprinz EisFux,

                      <insert>
                      Vorsorglicher Grinsesmiley: ;-)
                      </insert>

                      nun ja, wir haben uns schon kennengelernt :-)
                      bin ich denn wirklich so schlimm?

                      In Wirklichkeit wolltest du aber wissen, wie Großmeister Perl (;-)) intern den Speicher für seine Variablen verwaltet, richtig?

                      Falsch :-)

                      (PERL) Ein Element aus einem Array entfernen

                      und den Speicher, den das Element belegt hat, wieder an das System zurückgeben. Denkbares Beispiel:

                      undef $array[5] -> <storagebacktosystem>;
                      undef @array -> <storagebacktosystem>;

                      Aber soetwas gibt es wohl leider nicht.

                      Die Frage war, ob es einen Befehl in Perl gibt, der nicht nur einen Skalar leert, sondern auch den durch den Skalar belegten Speicher wieder ans System zurückgibt. Ein weiteres Beispiel, um einen kleinen Einblick in meine Situation zu geben:

                      Ich generiere eine Vielzahl von Grafiken mit dem Modul GD::Graph::lines. Diese Bilder werden über den Browser dargestellt...
                      diese Info zu deiner Bemerkung:

                      Und zweitens ist dieses Forum hier vor allem für Web-(-Design, -Mastering, -Programming, -...)-Probleme geschaffen worden

                      Die Arrays leere ich zwar am Ende meines Scripts, aber trotzallem bleibt die Speicherbelegung dauerhaft bei ca. 26 MB. Da leider mehrere Prozesse gestartet sind (FCGI), um genau zu sein 10, belegen diese dauerhaft ca. 260 MB.

                      Viele Grüße,
                      coolblue

                      --

                      never say oops after you submitted a job :-)
                      _der_Ton_macht_die_Musik_!!!_
        2. Also Christian,

          EisFux lächelt,

          Was hast du nur immer mit dem Speicherplatz? Darum kümmert sich die Perl-Laufzeitmgebung schon selbst...

          Für Hilfe wäre ich dankbar.

          SelfHTML ist mehr als ein Forum ;-)

          ich lächel ebenfalls,

          Perl der Allmächtige kümmert sich um alles *g*

          Warum programmiere ich dann noch überhaupt?

          Ich suche dann mal fleißig weiter :-)

          du hingegen bist unfreundlich...

          Ja, den Sarkasmus kannst du auch getrost weglassen.

          und wenn der Begin einer Nachricht schon unfreundlich war, kann ich vom Rest auch nicht viel halten...

          ode doch Herr Meister Jedi :-)

          Beschaeftige dich mal mit Technologien wie Speicherverwaltung mit Hilfe

          von Reference Counting.

          Trotzallem werde ich diesen Rat beherzigen.

          Nun gut, Mr. Celvin Klein. Gute Nacht wünsch ich. Bis dann :-)

          Viele Grüße,
          coolblue

          --

          never say oops after you submitted a job :-)
          _der_Ton_macht_die_Musik_!!!_