Schrift
[thread]67[/thread]

Hash-Referenz an Sub übegeben



<< >> 6 Einträge, 1 Seite
pktm
 2003-10-19 00:11
#6442 #6442
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!
Also cih habe meine Werte aus dem Query-String in einer Hash-Referenz drin.
Das mache ich so:
Code: (dl )
1
2
my $cgi = CGI->new();
my $query = $cgi->Vars();


Jetzt würde ich gerne alle Query-Werte an die eine Sub übergeben.
Dachte mir das so:
mysub( \$query );
Nur erhalöte ich dann, wenn ich das mit
subs mysub{
my $query = @_;
auslese nur eine "1".
Wie muss ich das denn machen?
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
jan
 2003-10-19 00:16
#6443 #6443
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
$query ist doch bereits eine hashref, wenn ich mich nicht irre... übergib es einfach so, ohne \ davor, und schon sollte es gehen ...
und $query = @_; ist nicht ganz so sauber, mach lieber
$query = shift @_; bzw, in kurzform: $query = shift;
betterworld
 2003-10-19 00:19
#6444 #6444
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Naja, @_ ist ein Array, und wenn Du das einem Skalar zuweist, bekommst Du nur die Laenge. So geht es besser:
Code: (dl )
my ($query) = @_;


Nun sind aber immer noch nicht alle Fehler raus: Vars() gibt einen Hash zurueck. Den solltest Du dann auch in einer Hashvariablen speichern. Und dann guck Dir bitte noch den Parameter an Deine sub an... Das ist zur Zeit eine Referenz auf einen Skalar... soll das so sein? Anyways, wenn Du den Hash als Hash behandelst, sieht das schon anders aus

Edit: s/Query/Vars/\n\n

<!--EDIT|betterworld|1066508771-->
format_c
 2003-10-19 00:21
#6445 #6445
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Oder wieder dereferenzieren, was allerdings ganz schön schwachsinnig wär ;)

Gruß Alex
betterworld
 2003-10-19 00:30
#6446 #6446
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Ich habe gerade nachgeforscht: Vars() gibt wahlweise einen Hash oder eine Hashreferenz zurueck, je nach Kontext. Also musst Du nur diesen Backslash da weglassen... wenn Du eine Referenz uebergibst, dann bleibt es eine Referenz. Dazu braucht es keinen Backslash.

Und dann wie gesagt der Fehler mit dem @_
Strat
 2003-10-19 02:46
#6447 #6447
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use CGI
my $cgi = CGI->new();
my $paramsRef = $cgi->Vars();
&PrintParams($paramsRef);
# -------------------------------------------------------
sub PrintParams {
 my $paramsRef = shift; # oder my ($paramsRef) = @_;
 while (my ($key, $value)) = each %$paramsRef) {
   print "$key => $value<br>\n";
 } # while
} # PrintParams
\n\n

<!--EDIT|Strat|1066517257-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 6 Einträge, 1 Seite



View all threads created 2003-10-19 00:11.