PERL: Array zurückgeben

  • Hi


    Ist das die richte Art und Weise, ein Array aus einer Funktion zurückzugeben ?



    print "$#ergebnisse"; ergibt 2


    Und wenn ja , wie gestaltet sich der der Funktionaufruf ?


    Code
    my @test =();
    ($test) = SRM::DBAccess::Execute("select * from tabelle");
    print "$#test


    print "$#test ergibt 0 müsste aber doch auch 2 sein.



    Vielen Dank schon mal....



    gehlhajo

    VDR-1: streamdev-server | Hummingboard2| TT 3600 USB | Siemens S500 Gehäuse | Archlinux mit eigen Skripten
    VDR-2: streamdev-client | rpihddevice | Raspberry 2b | Siemens S450 Gehäuse| Remote: URC6410 | LG 42LV4500 |
    Archlinux mit eigenen Skripten


  • Hallo gehlhajo,


    Du gibts in der Subrutine ja nur die Referenz des Arrays zurück.
    In Main mußt du also über die Referenz auf das Array zugreifen, sonst siehst du nur den Eintrag der Speicherstelle in $ref, was ein einzelner Scalar ist.


    Also z.B.


    $test->[0] # 1.Element
    @$test # ganzes Array


    oder du kopierst das (zurückgegebene) Array im Aufruf :


    (*test_array)= func(arg) ;


    Zum Einlesen in Referenzen :


    http://www.perlboard.de/perlguide/Kap19.html


    Abschnitte : Referenzen aus Subroutinen zurückgeben ff.


    Grüße vom Alex

    Wer Rechtschreibfehler findet, darf sie behalten


    Meine Konfiguration :


    Ion 2, 2 x S2 3600, 4 Gig Ram, OS : Kubuntu 12.04 LTS, Kernel 3.2.0-40-generic , x86_64, vdr.2.0.1 ( yavdr-testing ) , vdr-xine 0.9.4 ( yavdr-testing ) , xine-lib 1.2 ( yavdr-testing )

  • Möglichkeit 1:



    Code
    my @test = SRM::DBAccess::Execute("select * from tabelle");
    for my $t (@test) {
      print join(';', @{$t}), "\n";
    }


    Möglichkeit 2:



    Code
    my $pTest = SRM::DBAccess::Execute("select * from tabelle");
    for my $t (@{$pTest}) {
      print join(';', @{$t}), "\n";
    }
  • Hi Faup


    Zitat

    Original von faup


    Also z.B.
    $test->[0] # 1.Element


    Und genau das funktioniert bei mir nicht. Da kommt bei mir als Ergebnis:
    2ARRAY(0x19b23c4)ARRAY(0x19b23c4)ARRAY(0x19b23c4)

    VDR-1: streamdev-server | Hummingboard2| TT 3600 USB | Siemens S500 Gehäuse | Archlinux mit eigen Skripten
    VDR-2: streamdev-client | rpihddevice | Raspberry 2b | Siemens S450 Gehäuse| Remote: URC6410 | LG 42LV4500 |
    Archlinux mit eigenen Skripten


  • hallo hape


    Zitat

    Original von hape60

    Code
    my $pTest = SRM::DBAccess::Execute("select * from tabelle");
    for my $t (@{$pTest}) {
      print join(';', @{$t}), "\n";
    }


    Das funktioniert :
    Gibt es eigentlich eine Möglichkeit, uber den Spaltenname an den Wert zu kommen ?

    VDR-1: streamdev-server | Hummingboard2| TT 3600 USB | Siemens S500 Gehäuse | Archlinux mit eigen Skripten
    VDR-2: streamdev-client | rpihddevice | Raspberry 2b | Siemens S450 Gehäuse| Remote: URC6410 | LG 42LV4500 |
    Archlinux mit eigenen Skripten


  • Danke Euch allen für die Hilfe. Ich komme jetzt ein großes Stück weiter....

    VDR-1: streamdev-server | Hummingboard2| TT 3600 USB | Siemens S500 Gehäuse | Archlinux mit eigen Skripten
    VDR-2: streamdev-client | rpihddevice | Raspberry 2b | Siemens S450 Gehäuse| Remote: URC6410 | LG 42LV4500 |
    Archlinux mit eigenen Skripten


Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!