Schrift
[thread]7736[/thread]

array in ref deref



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
Froschpopo
 2006-02-24 14:53
#63247 #63247
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich habe folgende konstellation:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
my @args = ("name", [1,2,3,4]);

&func(\@args);

sub func {
  my @refs = shift @_;
  for (@$refs[1]) {
     ...
  }
}

Ich möchte gerne in func() die arrayref aus @args ausgeben.\n\n

<!--EDIT|Froschpopo|1140785780-->
Antworten mit Zitat
Arkhen2
 2006-02-24 15:17
#63248 #63248
User since
2005-03-11
25 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
my @args = ("name", [1,2,3,4]);

&func(\@args);

sub func {
 my $ref = shift;      # Referenz übernehmen
 for (@{$ref->[1]}) {  # Arrayreferenz in Arrayreferenz
    print $_;
 }
}
Antworten mit Zitat
Froschpopo
 2006-02-24 15:23
#63249 #63249
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Hey danke :)
gibt es noch eine andere schreibweise für (@{$ref->[1]}) ??
Mir ist mein Fehler noch nicht so ganz bewusst...
Antworten mit Zitat
frodus
 2006-02-24 15:39
#63250 #63250
User since
2003-09-26
147 Artikel
BenutzerIn
[default_avatar]
Ja,

Code: (dl )
1
2
3
4
5
@{$ref->[1]}

# oder (nicht getested)

@{$$ref[1]}


Gruss,

Frodus
Antworten mit Zitat
Crian
 2006-02-24 15:39
#63251 #63251
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Vielleicht ist Dir @{@{$ref}[1]} lieber? (mir nicht...)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Antworten mit Zitat
Arkhen2
 2006-02-24 15:53
#63252 #63252
User since
2005-03-11
25 Artikel
BenutzerIn
[default_avatar]
oder
Code: (dl )
1
2
3
4
5
6
...
sub func {
 for (@{@{$_[0]}[1]}) {  
   print $_;
}
}


hehe...
Antworten mit Zitat
Froschpopo
 2006-02-24 16:08
#63253 #63253
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
besten dank euch allen.
Jetzt das ganze noch mit einem hash. Als Vorlage:
Code: (dl )
my @args = ("name", { key => "value" });

wie bekomme ich den jetzt in seine natürliche form so dass ich ihn bequem mit each usw ausgeben kann?
Beispiel für die ausgabe ist nicht notwendig. Möchte nur wissen wie ich ihn dereferenzieren kann.
Antworten mit Zitat
frodus
 2006-02-24 16:10
#63254 #63254
User since
2003-09-26
147 Artikel
BenutzerIn
[default_avatar]
So:
Code: (dl )
$args[1]->{key}
\n\n

<!--EDIT|frodus|1140790283-->
Antworten mit Zitat
Dubu
 2006-02-24 16:16
#63255 #63255
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Froschpopo,24.02.2006, 14:23]Mir ist mein Fehler noch nicht so ganz bewusst...[/quote]
Dein Uebergabeparameter ist eine(!) Arrayreferenz. Du weist diese in der sub mittels shift dem Array @refs zu. Das Array @refs enthaelt also genau ein Element.

Deine Konstruktion @$refs[1] ist aber identisch mit {@$refs}[1], bedeutet also: Nimm das zweite Element des Arrays, auf das die Referenz $refs verweist. Eine Referenz $refs gibt es aber gar nicht.

Die erste Frage waere also: Warum uebergibst du eine Arrayreferenz an die sub, weist diese aber einem Array zu?

Edit: Falsch dereferenziert. *g*\n\n

<!--EDIT|Dubu|1140790886-->
Antworten mit Zitat
Froschpopo
 2006-02-24 16:22
#63256 #63256
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
[quote=frodus,24.02.2006, 15:10]So:
Code: (dl )
$args[1]->{key}
[/quote]
na das wusste ich auch schon ! aber wie bekomme ich den ganzen hash?
Antworten mit Zitat
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2006-02-24 14:53.