Schrift
[thread]12340[/thread]

Subroutinen und globale/lokale Variablen

Leser: 1


<< >> 5 Einträge, 1 Seite
DieJenny
 2008-08-11 15:54
#113348 #113348
User since
2008-08-11
2 Artikel
BenutzerIn
[default_avatar]
Hallo,

mit Perl beschäftige ich mich noch nicht sehr lange.
Nun bin ich auf ein kleines Problem gestoßen:
Im folgenden Code habe ich ein Array von Arrays, auf das in der Subroutine "Kreisfrei" zugreifen möchte und in @weg abspeichern. Dort wird @weg verändert, @matrix soll aber unangetastet bleiben.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use strict;

my @matrix;
@matrix = ( [0,1,0,0,0,0,1],
[1,0,0,0,0,0,0],
[1,1,0,1,0,0,1],
[1,1,1,0,1,0,0],
[1,1,1,1,0,1,0],
[1,1,1,1,1,0,0],
[1,1,1,1,1,1,0]
);
Kreisfrei (@matrix); # Rufe Subroutine auf
sub Kreisfrei{
my @weg=@_;
# mache irgendwas (auch in anderer Subroutine)
}


Leider ist @matrix nach der Kreisfrei Subroutine mit @weg (das ich im Sub geändert habe) überschrieben.

Hat jemand eine Idee, wie ich @matrix retten kann?

Vielen Dank,
Jenny
LanX-
 2008-08-11 16:14
#113349 #113349
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
tatsächlich kann @matrix nicht weg sein, was du wahrscheinlich machst ist die Einträge von @weg zu manipulieren. Die Einträge werden aus @matrix kopiert und sind Referenzen auf die gleichen Unterarrays, das heißt du greifst hier auf die selben Speicherstellen zurück.

Was du brauchst ist ein Deepcopy des AoA ... habe dunkel in Erinnerung dass man das mit Data::Dumper machen kann, aber hier sind genug Wissende unterwegs die da genauer weiterhelfen können... : )
LanX-
 2008-08-11 16:24
#113351 #113351
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
in diesem konkreten Fall sollte eine einstufige Kopie auch reichen
Code (perl): (dl )
my @weg=map { @$_ } @_;


kanns gerade aber nicht austesten...

NACHTRAG:

so funktionierts
Code (perl): (dl )
my @weg=map { [@$_] } @_;


aber ne Lösung mit data:Dumper ist vorzuziehen ...
DieJenny
 2008-08-11 17:01
#113354 #113354
User since
2008-08-11
2 Artikel
BenutzerIn
[default_avatar]
Oh toll, es funktioniert!

Dankeschön!

Wieder was gelernt.
LanX-
 2008-08-11 18:24
#113360 #113360
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
LanX-+2008-08-11 14:14:36--
Was du brauchst ist ein Deepcopy des AoA ... habe dunkel in Erinnerung dass man das mit Data::Dumper machen kann, aber hier sind genug Wissende unterwegs die da genauer weiterhelfen können... : )


hmm offensichtlich gibts zig Möglichkeiten es zu realisieren, am kürzesten schaut für mich dclone aus CPAN:Storable aus.
<< >> 5 Einträge, 1 Seite



View all threads created 2008-08-11 15:54.