Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8563[/thread]

array kopieren: hash in array

Leser: 6


<< >> 4 Einträge, 1 Seite
Gast Gast
 2006-12-08 11:22
#72385 #72385
Ich will einen Array (mit hashes drinn) kopieren, da ich nur die Kopie und nicht das Original-Array bearbeiten möchte.
Wenn ich jetzt in der Kopie das Arrays einen Hash-Wert ändere, dann wird der aber auch in der Original-Datei geändert.
Kann man das irgendwie umgehen??

ein kleiner Beispiel-Code:
Code: (dl )
1
2
3
4
5
6
@a=(0,1,2,3,4,5,{ich=>'ich'});
print "a= @a, $a[6]{ich} \n";
@d=@a;
$d[6]{ich} = 'du';
$d[7]=8;
print "d= @d, $d[6]{ich} \na= @a, $a[6]{ich}"


gibt dann aus:
Code: (dl )
1
2
3
a= 0 1 2 3 4 5 HASH(0x224f00), ich 
d= 0 1 2 3 4 5 HASH(0x224f00) 8, du
a= 0 1 2 3 4 5 HASH(0x224f00), du
renee
 2006-12-08 11:44
#72386 #72386
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Eine Lösung mit CPAN:Clone:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl

use strict;
use warnings;
use Clone qw(clone);
use Data::Dumper;

my @a=(0,1,2,3,4,5,{ich=>'ich'});
print Dumper(\@a);
my @d=@{clone(\@a)};
$d[6]{ich} = 'du';
$d[7]=8;
print Dumper(\@a,\@d);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2006-12-08 11:49
#72387 #72387
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und ohne Modul:
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
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

sub deep_clone($);

my @a=(0,1,2,3,4,5,{ich=> [1,2,3]});
print Dumper(\@a);
my @d=@{deep_clone(\@a)};
$d[6]{ich} = 'du';
$d[7]=8;
print Dumper(\@a,\@d);


sub deep_clone($){
my ($ref) = @_;

my $target;

unless(ref($ref)){
$target = $ref;
}
elsif(ref($ref) eq 'ARRAY'){
for my $idx(0..scalar(@$ref)-1){
$target->[$idx] = deep_clone($ref->[$idx]);
}
}
elsif(ref($ref) eq 'HASH'){
for my $key(keys %$ref){
$target->{$key} = deep_clone($ref->{$key});
}
}

return $target;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
FIFO
 2006-12-09 16:30
#72388 #72388
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Wer kein CPAN-Modul installieren will/kann, findet im Standardmodul Storable was ähnliches: Storable::dclone($ref)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"
<< >> 4 Einträge, 1 Seite



View all threads created 2006-12-08 11:22.