Pygo: use strict und eval

Hallo,

Ich möchte gerne Objekte durch eine pipe von Child an Parent-Prozesse schicken. Zu diesem Zweck möchte ich gerne Data::Dumper und eval verwenden. Allerdings kriege ich jetzt einen Fehler, der durch use strict hervorgerufen wird. Hier mal der glaub wichtigste Teil meines Codes:

[...]
my $pid = fork();

if($pid){
 [...]
 my $actual_line = <$pipe>;
 my $newobj = eval $actual_line || die $@;

$newobj->print();
}else{
 [...]
 my $object = new MyClass();
 $object->add_data("schmu");

my $testdump = Data::Dumper->new([$object]);
 $testdump->Indent(0);

my $ausgabe = $testdump->Dump;
 print $ausgabe;
 print $pipe $ausgabe;
 [...]
}
<<<<<

Die erzeugte Ausgabe sieht dabei wie folgt aus:

$VAR1 = bless( {'dates' => 'schmu'}, 'MyClass' );

Global symbol "$VAR1" requires explicit package name at (eval 1) line 1, <GEN0> line 1.
<<<<<

Ich habe leider noch nicht rausgefunden, wie ich denn diesen generischen Namen irgendwo als my oder was auch immer deklarieren soll. Wenn ich use strict weglasse, sehe ich, dass das eval sonst zu tun scheint, sogar mit $newobj->print() wird die 'objekteigene' print-routine ausgeführt.

Vielen Dank für Hilfe - Pygo

  1. Ich habe leider noch nicht rausgefunden, wie ich denn diesen generischen Namen irgendwo als my oder was auch immer deklarieren soll. Wenn ich use strict weglasse, sehe ich, dass das eval sonst zu tun scheint, sogar mit $newobj->print() wird die 'objekteigene' print-routine ausgeführt.

    Du musst einfach $VAR1 deklarieren, hier:

    my $VAR1;
    my $newobj = eval $actual_line || die $@;

    Vielen Dank für Hilfe - Pygo

    Struppi.

    1. Du musst einfach $VAR1 deklarieren, hier:

      Ok, danke - das klappt sogar bei mir ;)
      Jetzt muss ich nur noch überlegen, wie ich es anstelle, wenn ich später eine unbekannte Anzahl von Objekten durch die pipe jage...

      1. Du musst einfach $VAR1 deklarieren, hier:

        Ok, danke - das klappt sogar bei mir ;)
        Jetzt muss ich nur noch überlegen, wie ich es anstelle, wenn ich später eine unbekannte Anzahl von Objekten durch die pipe jage...

        Normalerweise benutzt Data::Dumper immer $VAR1.

        Struppi.

        1. Normalerweise benutzt Data::Dumper immer $VAR1.

          Ah ok, dachte er zählt durch. Ansonsten seh ich, ich kann ja gleich
          my $testdump = Data::Dumper->new([$object],["bla"]);
          machen, dann heissen sie auch alle gleich (der Name interessiert mich nicht) und ich muss das auch nur einmal machen.

          Vielen Dank für Deine Hilfe!

      2. Hallo Pygo,

        Jetzt muss ich nur noch überlegen, wie ich es anstelle, wenn ich später eine unbekannte Anzahl von Objekten durch die pipe jage...

        Du kannst zur Not auch stellenweise strict ausschalten mit

        no strict vars;

        Ich glaube das gilt dann nur für den umschließenden Block, außen herum ist trotzdem der volle strict rechtskräftig.

        Aber am besten selber nochmal nachschlagen, falls du soetwas brauchst, damit du die alle Details kennst. :)

        Gruß,
        Cruz