Schrift
[thread]12016[/thread]

Subroutine empfängt nur einen Wert.



<< >> 5 Einträge, 1 Seite
roooot
 2008-06-15 23:12
#111050 #111050
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Hallo.

Ich habe mir eine kleine Hilfsklasse für mySQL gebaut. Leider spinnt das irgendwie:

Es wird so aufgerufen
Code (perl): (dl )
1
2
3
4
5
6
7
8
    require MySQL;
    my $mysql      = new MySQL or croak "can't create MySQL Object";
    
    my @sql_output = $mysql->get({
        values  => ('test1','test2'),
        table   => 'test',
        where   => "`type` = $id",
    });


was dann folgendes ausführt (Die eigentliche Abfrage usw fehlt noch)
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
sub get {

    my ($self,$arg_ref) = @_;

    my $prefix = $prefix_of{ident $self};

    ### get needed parameters:
    my @values      = $arg_ref->{'values'};     # ARRAY: value1, value2,...
    my $table       = $arg_ref->{'table'};      # string
    my $where       = $arg_ref->{'where'};      # sql-string, opt
    my $sort        = $arg_ref->{'sort'};       # sql-string, opt

    ### check if alle values are filled in:
    if(!@values || !$table) {
        croak qq{
            MySQL Error: Not all needed params (value, table)
            are specified!
            value: @values
            table: $table
        };
    }

    ### transform values to
    my $sql_formed_values = join '`,`', @values;

    die $sql_formed_values; #testing

}


Leider springt meine Abfrage an, die dann folgendes ausgibt:
Code: (dl )
1
2
3
4
5
	        MySQL Error: Not all needed params (value, table)
are specified!
value: test1
table:
at module/Gallery/Category.pm line 61


Danke für Hilfe/Tipps
Viele Grüße :)
Linuxer
 2008-06-15 23:25
#111051 #111051
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Quote
5: values => ('test1','test2'),


Bei komplexen Datastrukturen musst Du mit Referenzen arbeiten; also:

Code (perl): (dl )
1
2
3
4
5
my @sql_output = $mysql->get({
        values  => [ 'test1','test2' ],  # [] anstatt ()
        table   => 'test',
        where   => "`type` = $id",
});



Innerhalb von get() musst Du dann wieder dereferenzieren:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub get {
   my ( $self, $arg_ref ) = @_;
   # ...

   ### get needed parameters:
   my @values      = @{ $arg_ref->{'values'} };     # ARRAY: value1, value2,...
   my $table       = $arg_ref->{'table'};      # string
   my $where       = $arg_ref->{'where'};      # sql-string, opt
   my $sort        = $arg_ref->{'sort'};       # sql-string, opt
   ###

   # ...


Kurzes Fallbeispiel:

Quote
~$ perl
use strict;
use warnings;

sub foo {
my $ref = shift;
my @arr = @{ $ref->{aa} };

print "@arr \n";
}


foo( { aa => [ 1, 2 ], } );


1 2



perldsc
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
roooot
 2008-06-15 23:31
#111052 #111052
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Also machen die [] Klammern den Array zu einer Referenz auf den anoymen Array selbst? Die () Klammern hingegeben sind direkt der anoyme Array?

und @{ .. } wandelt das ganze dann wieder in den Array rum?


Hab ich das so richtig verstanden?

Man muss bei sowas immer eine Referenz vom Array übergeben?
Viele Grüße :)
Linuxer
 2008-06-15 23:51
#111053 #111053
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
roooot+2008-06-15 21:31:40--
Also machen die [] Klammern den Array zu einer Referenz auf den anoymen Array selbst? Die () Klammern hingegeben sind direkt der anoyme Array?


[] erzeugen einen Referenz auf einen anonymen Array
() erzeugen eine Liste

Code (perl): (dl )
1
2
3
4
my @array = ( 1, 2 );
my $a_ref = [ 3, 4 ];

print "@array\n$a_ref\n";


roooot+2008-06-15 21:31:40--
und @{ .. } wandelt das ganze dann wieder in den Array rum?

Hab ich das so richtig verstanden?


@{ ... } dereferenziert die enthaltene Array-Referenz ...


roooot+2008-06-15 21:31:40--
Man muss bei sowas immer eine Referenz vom Array übergeben?

Schwer zu sagen, da mir nicht bekannt ist, was Du mit "bei sowas" meinst.

Es fällt mir schwer, wegen den Begrifflichkeiten "das ganze" und "bei sowas" ein klares Ja oder Nein zu antworten, da für mich nicht erkennbar ist, was Du konkret meinst.
Ich lege Dir nahe, Dich mit den entsprechenden Teilen der perldoc auseinanderzusetzen:

http://perldoc.perl.org/perlreftut.html
http://perldoc.perl.org/perlref.html
http://perldoc.perl.org/perllol.html
http://perldoc.perl.org/perldsc.html



///ModEdit GwenDragon: Vertipper beim Array in Perlcode korrigiert
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
roooot
 2008-06-16 00:44
#111056 #111056
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Danke, werde mich einlesen.
Viele Grüße :)
<< >> 5 Einträge, 1 Seite



View all threads created 2008-06-15 23:12.