Jan: Array ins Environment

Hi,

ich würde gerne den Environment-Hash ($ENV) ein Array eintragen. Das generelle Problem wird wohl sein, dass man kein Array in einen Hash packen kann.
Wie kann ich da 'ne Lösung finden?

Thanx

  1. Guude Jan

    ich würde gerne den Environment-Hash ($ENV) ein Array eintragen. Das generelle Problem wird wohl sein, dass man kein Array in einen Hash packen kann.

    Kann man. Das ganze geht mit Referenzen und anonymen Arrays.
    z.B. $ENV{blah} = @array;
    oder $ENV{blah} = [ '1', '2', '3' ];

    Zugriff geht über $ENV{blah}->[0] oder $ENV{blah}[0] .

    Tschö Matti

    1. Hallo,

      ich würde gerne den Environment-Hash ($ENV) ein Array eintragen. Das generelle Problem wird wohl sein, dass man kein Array in einen Hash packen kann.

      Kann man. Das ganze geht mit Referenzen und anonymen Arrays.
      z.B. $ENV{blah} = @array;
      oder $ENV{blah} = [ '1', '2', '3' ];
      Zugriff geht über $ENV{blah}->[0] oder $ENV{blah}[0] .

      Bleibt eigentlich nur zu klären, ob das irgendeinen Sinn ergibt.
      Die Environment-Variablen haben IMHO den Sinn, um Informationen über den aktuellen Systemzustand, eben der Umgebung, in dem ein Prozeß läuft, zu beschreiben.
      Der Webserver trägt bestimmte Informationen in das Environment ein (diese Dingens mit HTTP_ bzw SERVER_ ), um den aufgerufenen Script bzw. Programmen etwas Informationen über sich und den Client, der den Request ausführte, mitzugeben.
      Änderungen im Environment sollten auch nur durchgeführt werden, um eventuell zu startende Subprozessen eine bestimmte Umgebung zu vermitteln, ohne auf Programmparameter zugreifen zu müssen. Ein praktisches Beispiel ist etwa die Umgebungsvariable 'ORA_HOME', welche bei Zugriffen auf den Oracle-Client (für Datenbankabfragen) gesetzt sein muß.

      Auch wenn es möglich ist, so wie Matti beschrieben hat, eine anonymes Array ins Environment zu speichern, so kann dieses Array nicht (zuverlässig?) anderen Prozessen übergeben werden.[1]

      Mit anderen Worten, sowas gehört IMHO nicht ins Hash %ENV. ES ist ja nicht gerade so, daß es mit Perl wirklichen Mangel gibt, innerhalb eines Scripts Datenstrukturen selbst zu definieren, daher sind solche Verrenkungen auch nicht gerade schlau, auch wenn es machbar ist.

      Grüße
        Klaus

      [1] Allenfalls könnte das noch mit Perl-Prozessen funktionieren, was ich allerdings nicht glaube, aber auch nicht ausschließen kann.

      1. Hallo Klaus

        Bleibt eigentlich nur zu klären, ob das irgendeinen Sinn ergibt.

        Die Environment-Variablen haben IMHO den Sinn, um Informationen über den aktuellen Systemzustand, eben der Umgebung, in dem ein Prozeß läuft, zu beschreiben.

        Mit anderen Worten, sowas gehört IMHO nicht ins Hash %ENV. ES ist ja nicht gerade so, daß es mit Perl wirklichen Mangel gibt, innerhalb eines Scripts Datenstrukturen selbst zu definieren, daher sind solche Verrenkungen auch nicht gerade schlau, auch wenn es machbar ist.

        Da hast du allerdings recht. Ich hatte es leider vergessen zu erwähnen. Ich wollte nur die Möglichkeit zeigen, wie das geht, und habe aufgrund der Fragestellung auch den Hash %ENV genommen.

        Was mir nicht bekannt ist, ob es möglich ist, sowas ähnliches auch in der ~/.profile (unter Linux und Derivaten) zu machen (anonymen Array in Environment zu definieren), womit man dann eine Konfiguration machen könnte, mit der man in allen seinen Programmen arbeiten kann. Aber auch das halte ich nicht unbedingt für einen guten Programmierstil, weil das ganze ggf. für andere nur umso schwerer verständlicher wird (da sie die Seitenbezüge zum Setzen der Environment Variablen nicht kennen.

        Tschö Matti

        1. hi!

          Was mir nicht bekannt ist, ob es möglich ist, sowas ähnliches auch
          in der ~/.profile (unter Linux und Derivaten) zu machen (anonymen
          Array in Environment zu definieren), womit man dann eine
          Konfiguration machen könnte, mit der man in allen seinen
          Programmen arbeiten kann.

          Wenn ich dich richtig verstanden habe, dann ist das nicht möglich. In
          den Umgebungsvariablen kannst du nur reine Strings speichern. Perl-
          Hashes sind ja eine interne Datenstruktur von Perl, die so nur im
          Speicher existiert, und die du nicht einfach auf in einen String
          übertragen kannst.

          Und außerdem ist die Umgebung für die Konfiguration von Programmen
          nicht sonderlich geeignet, zb. aufgrund von Größenbeschränkungen der
          gesamten Umgebung bzw. der Einzelvariablen. Konfigurationsdateien
          müssen allerdings erstmal gefunden werden, und dafür sind dann die
          Umgebungsvariablen da, weil die Pfade von der jeweiligen Umgebung
          abhängen, und ohne irgendwelche zentralen Angaben die Programme ihre
          Konfiguration evtl. gar nicht finden.

          bye, Frank!