Probleme bei Rückgabe von Hashes

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von SchaubFD, 12.02.2008.

  1. #1 SchaubFD, 12.02.2008
    SchaubFD

    SchaubFD Mitglied

    Dabei seit:
    03.01.2008
    Beiträge:
    35
    Zustimmungen:
    0
    Hallo,

    ich habe folgendes Problem, ich möchte mehrere Hashes gleichzeitig über ein "return" zurückgeben, leider ist die Rückgabe ewig leer oder Null.

    Code:
    return (
       \%pos_rechnungsbereich,\%pos_produktfamilie,\%pos_anbieter,
       \%pos_vertragsnummer,\%pos_account,\%pos_anschlussart,
       \%pos_anschluss,\%pos_infoanschlussart,\%pos_infoanschluss,
       \%pos_verbindungen,\%pos_leistungen,\%pos_leistungart,
       \%pos_menge,\%pos_nettoeinzel,\%pos_nettogesamt,\%pos_steuer,
       $pos_count
     );
    
    In folgendem Code werden die Hashes übergeben und der Zähler, Wobei der Zähler OK ist.

    Code:
    (
     $pos_rechnungsbereich,$pos_produktfamilie,$pos_anbieter,
     $pos_vertragsnummer,$pos_account,$pos_anschlussart,
     $pos_anschluss,$pos_infoanschlussart,$pos_infoanschluss,
     $pos_verbindungen,$pos_leistungen,$pos_leistungart,
     $pos_menge,$pos_nettoeinzel,$pos_nettogesamt,$pos_steuer,
     $pos_count
    )=lese_pos();
    
    Was mache ich bei der Übergabe falsch? Alle Hashes sind in der Funktion gefüllt, aber nach der Übergabe leer.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 12.02.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Wie stellst du fest, dass die leer sind?
    Wie greifst du darauf zu?

    Kleines Beispiel:
    Code:
    perl -e '
    sub fu(){$A{1}=b;
    $B{A}=5;
    return \%A,\%B;};
    ($rA,$rB)=fu;
    print "$rA->{1} $rB->{A}\n"
    '
    Zeig mal ein Beispiel, wie du sie in der Funktion definierst, füllst und wie du den Returnwert auswertest.

    Tipp:
    ref gibt dir den Typ zurück.
    Gruß Wolfgang
     
  4. #3 SchaubFD, 12.02.2008
    Zuletzt bearbeitet: 12.02.2008
    SchaubFD

    SchaubFD Mitglied

    Dabei seit:
    03.01.2008
    Beiträge:
    35
    Zustimmungen:
    0
    Code:
    $pos_nettogesamt{pos_count}     =$nettogesamt;
    
    Das ist die Zuweisung in der Funktion. Ist bei allen Feldern ähnlich. Dort bekomme ich mit "print $pos_nettogesamt{pos_count}" nach der Zuweisung auch einen Wert zurück.

    Nur nach dem Funktionaufruf geht es nicht (also das Übertragen des Hashes aus der Funktion heraus bzw. diese Adressübergabe.
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Code:
    sub fu() {
      $A{1}=b;
      $B{A}=5;
      return (\%A,\%B);
    };
    
    ($rA,$rB)=fu;
    
    print "$rA{1} $rB{A}\n"
    
    So müsste das in meiner Art aussehen.
     
  5. #4 Wolfgang, 12.02.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Dann sollte bei dir folgendes einen Wert zeigen:
    Code:
    print "$pos_nettogesamt->{pos_count}\n";
    
     
  6. #5 SchaubFD, 12.02.2008
    Zuletzt bearbeitet: 13.02.2008
    SchaubFD

    SchaubFD Mitglied

    Dabei seit:
    03.01.2008
    Beiträge:
    35
    Zustimmungen:
    0
    Wolfgang, ich kann das erst morgen früh probieren. Wie schon gesagt, mit meiner Variante geht es nicht. Ich bekomme keine Fehlermeldungen. Danke für deinen Vorschlag.

    Leider geht es immer noch nicht! Der count ist ein einfacher ganzzahliger Zähler, den ich später noch für Sortierungen brauche. Ich möchte nur mit $A->{1} oder $A->{99} auf den Hash-Inhalt zugreifen. Mache ich was in der Übergabe also dem Funktionsaufruf falsch? Ich weis nicht weiter.

    Hier mal ein komplettes Beispiel
    Code:
    sub fu() {
      $A{1}="Hugo";
      $B{1}="Schmitt";
      $C{1}="Vorsitzender";
      $Count=1;
      return \%A,\%B,\%C,$Count;
    };
    
    ($rA,$rB,$rC,$Anzahl)=fu;
    
    print "<$rA{1}><$rB{1}><$rC{1}><$Anzahl>\n"
    
    Das Ergebnis sollte
    <Hugo><Schmitt><Vorsitzender><1>
    sein!
    Perl macht daraus
    <><><><1>
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 SchaubFD, 13.02.2008
    SchaubFD

    SchaubFD Mitglied

    Dabei seit:
    03.01.2008
    Beiträge:
    35
    Zustimmungen:
    0
    Hallo,

    mittlerweile habe ich eine Lösung über Referenzen, möchte diese Hilfestellung aus einem Perl Forum gerne zeigen:

    Code:
    use strict;
    use warnings;
    
    sub pause {
        print '[Return] um fortzufahren ...'; <>;
    }
    
    sub fu() {
      my %A;
      my %B;
      my %C;
      my $Count;
      
      $Count=0;
      $A{$Count}="Hugo";
      $B{$Count}="Schmitt";
      $C{$Count}="Vorsitzender";
      $Count++;
      $A{$Count}="Dieter";
      $B{$Count}="Klein";
      $C{$Count}="Personalrat";
      $Count++;
      return (\%A,\%B,\%C,$Count);
    };
    
    my $hA;
    my $hB;
    my $hC;
    my $Anzahl;
    
    ($hA,$hB,$hC,$Anzahl)=fu;
    
    print "<$hA->{0}><$hB->{0}><$hC->{0}>\n";
    print "<$hA->{1}><$hB->{1}><$hC->{1}>\n";
    
    pause;
    
     
  9. #7 Wolfgang, 13.02.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Sorry, habe dein edit nicht mehr gelesen.
    Aber da du wohl vorher nicht use strict benutzt hast, hast du die ref nicht angezeigt bekommen, wo du Werte erwartet hast.
    Genau das hatte ich ja vermutet.
    Wie du auf ref-hash-werte zugreifst hatte ich ja gezeigt.
    Wenn du unsicher bist, dreferenziere vorher.
    Code:
    my %newhash=%$refHash;
    
    Gruß Wolfgang
     
Thema:

Probleme bei Rückgabe von Hashes

Die Seite wird geladen...

Probleme bei Rückgabe von Hashes - Ähnliche Themen

  1. grub-pc Probleme bei upgrade

    grub-pc Probleme bei upgrade: Hallo, ich habe beim dist-upgrade folgendes Problem: ---------- Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Trigger für...
  2. Probleme mit YUM

    Probleme mit YUM: Hallo, ich habe CentOs 7 als Dualboot mit Windows 7 auf einen Dell Latitude E5510 installiert. Dies hat soweit auch alles geklappt. Leider habe...
  3. Forscher analysieren Durchsatzprobleme im Linux-Scheduler

    Forscher analysieren Durchsatzprobleme im Linux-Scheduler: Eine Gruppe von Forschern hat Fälle identifiziert, in denen der Scheduler im Linux-Kernel falsche Entscheidungen trifft und die CPUs nicht so gut...
  4. München: LiMux als Sündenbock für IT-Probleme?

    München: LiMux als Sündenbock für IT-Probleme?: Im Münchner Stadtrat soll später in diesem Jahr erneut über den Einsatz von Linux in der Stadtverwaltung diskutiert werden. Die Grünen vermuten,...
  5. BSI-Audit findet keine akuten Probleme in OpenSSL

    BSI-Audit findet keine akuten Probleme in OpenSSL: Das Bundesamt für Sicherheit in der Informationstechnik hat OpenSSL auf seine Sicherheit untersuchen lassen. Die Analyse zeigt vor allem, dass die...