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";
    }

    VDR Test: odroid N2+, Ubuntu Focal

  • Hi Faup

    Quote

    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

    Quote

    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

  • Quote

    ibt es eigentlich eine Möglichkeit, uber den Spaltenname an den Wert zu kommen ?


    Schau Dir mal fetchrow_hashref() an.

    -- Was zum Geier ist eine Signatur???

  • 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

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!