Schrift
[thread]6167[/thread]

Referenz auf unbenanntes! Array, Hash etc.?

Leser: 1


<< >> 9 Einträge, 1 Seite
kolla
 2004-03-27 16:05
#81304 #81304
User since
2004-03-25
12 Artikel
BenutzerIn
[default_avatar]
Hallo Gemeinde!

Nur 'mal so am Rande - rein interessehalber für 'nen Perl-Neuling:

Code: (dl )
$pointer = [0 .. 999];


Gibt's für Referenzen auf'n Array ohne Namen in Perl 'ne sinnvolle Notwendigkeit?
- oder folgt dies nur der Logik, wenn ich mit der Adresse
eines "normalen" Array's arbeiten kann,
so muß dies auch für namenslose gelten?

Walter
pq
 2004-03-27 17:11
#81305 #81305
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich verstehe deine frage / dein problem nicht ganz, aber für perl ist es erst mal egal, ob eine array-
referenz einen namen hat oder nicht, d.h. hier
my $aref1 = [0..23];
my @array = (0..23); # edit: .. statt . danke E|B
my $aref2 = \@array;

besteht zwischen $aref1 und $aref2 im prinzip kein unterschied, beides sind referenzen auf arrays.
nur das array, das von $aref2 referenziert wird, kann noch direkt angesprochen werden.
aber sobald @array z.B. aus dem scope fällt, etwa beim ende einer subroutine, dann
sind beides anonyme arrays.\n\n

<!--EDIT|pq|1080403187-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
[E|B]
 2004-03-27 17:26
#81306 #81306
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Quote
Code: (dl )
my @array = (0.23);


Was ist das denn?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
pq
 2004-03-27 18:01
#81307 #81307
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[E|B
,27.03.2004, 16:26]Was ist das denn?

hab's geändert; mir scheint's, ich bin noch nicht so ganz wach; angesichts
der tageszeit werde ich das dann wohl auch nicht mehr.

edit: abgesehen davon lautet die antwort: ein array mit einem element 0.23,
also null komma dreiundzwanzig. eigentlich vollkommen legitim =)\n\n

<!--EDIT|pq|1080403405-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
format_c
 2004-03-27 19:27
#81308 #81308
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
z.B. brauch man es um mehrdimensionale Array realisieren zu können:
Code: (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
29
30
31
32
33
34
35
36
37
38
39
40
41
format_c@linux:~> perl
use Data::Dumper;
my @array;
for (0..4) {
push @array,[0..3];
}
print Dumper(\@array);

$VAR1 = [
[
0,
1,
2,
3
],
[
0,
1,
2,
3
],
[
0,
1,
2,
3
],
[
0,
1,
2,
3
],
[
0,
1,
2,
3
]
];
format_c@linux:~>


Gruß Alex
[E|B]
 2004-03-27 21:26
#81309 #81309
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@pq

Hehe, ich dachte nur, das wäre etwas, das ich noch nicht kenne. Hab dann mal sicherheitshalber nachgefragt. ;)
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Gast Gast
 2004-03-28 14:03
#81310 #81310
[quote=pq,27.03.2004, 16:11]ich verstehe deine frage / dein problem nicht ganz...[/quote]
ähh, also die notwendigkeit von referenzen ist mir schon klar,
ich habe auch begriffen, dass perl mehrdimens. arrays als "pointer auf vektoren" abbildet --- also, mal anders gefragt: ( vergessen wir 'mal die referenzen )
wozu sind
namenslose arrays, hashes etc. sinnvoll?
weil, "namenslos" bedeutet doch, dass die values irgendwo statisch im sourecode stehen
Code: (dl )
$vec = [a,b,c,d,e,f];
, so ähnlich wie 'ne Konstante halt.
gut, durch das referenzieren bekomme ich 'ne möglichkeit (indirekt) mit der liste zu arbeiten ... aber der tiefere sinn von "namenslos" ergründet sich mir nicht - so wirklich.

o.k. ich fürchte, dass ich auf 'nen gedanklichen holzweg bin - und sich dieses prob ganz automatisch löst ;-) wenn ich mich weiter mit dem thema beschäftige

d.h. ich stelle meine fragen erst 'mal zurück - und versuche 'mal etwas tierfer in perl einzudringen...

cu walter
Ronnie
 2004-03-28 15:03
#81311 #81311
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Quote
...weil, "namenslos" bedeutet doch, dass die values irgendwo statisch im sourecode stehen...


du kannst selbstverständlich auch "namenlose" Arrays etc. zur Laufzeit verändern:
Code: (dl )
push @$arr_ref $value;


Gruss,
Ronnie
kabel
 2004-03-28 15:40
#81312 #81312
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
[quote=Guest,28.03.2004, 12:03]wozu sind namenslose arrays, hashes etc. sinnvoll?
weil, "namenslos" bedeutet doch, dass die values irgendwo statisch im sourecode stehen
Code: (dl )
$vec = [a,b,c,d,e,f];
, so ähnlich wie 'ne Konstante halt.
gut, durch das referenzieren bekomme ich 'ne möglichkeit (indirekt) mit der liste zu arbeiten ... aber der tiefere sinn von "namenslos" ergründet sich mir nicht - so wirklich.[/quote]
es gibt keinen tieferen sinn; namenlos (anonymous) heisst nur, dass das array/hash/skalar selbst keinen namen hat -- sondern die referenz eben.

Code (perl): (dl )
1
2
3
4
5
6
7
my $aref = 0;
{
   my @array = (...); # benamtes array
   $aref = \@array; # benamte arrayreferenz
}
# hier existiert der [b]name[/b] @array nicht mehr
# das array kann jedoch noch über den [b]namen[/b] $aref angesprochen werden
-- stefan
<< >> 9 Einträge, 1 Seite



View all threads created 2004-03-27 16:05.