Thread Dereferenzierung klappt nicht (14 answers)
Opened by bianca at 2022-02-06 09:40

Linuxer
 2022-02-06 19:57
#194234 #194234
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Man muss sich beide Datenstrukturen (Original und Kopie) ausgeben lassen und dann die Ausgaben vergleichen.

Wenn nur die Kopie geändert wurde, und im Original die gleiche Änderungen sichtbar werden, dann kann es keine
"saubere", tiefe Kopie gewesen sein.

Code (perl): (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
#! /usr/bin/env perl
use strict;
use warnings;
use 5.020;

use Data::Dumper;
use Storable qw( dclone );

sub _dump {
        my ( $name, $object ) = @_;

        say Data::Dumper->new(
                [ $object ], [ "*$name" ],
        )->Sortkeys(1)
        ->Useqq(1)
        ->Dump();
}


my $original = {
        sub1 => {
                sub2 => { foo => 'bar' },
        },
};

my $tiefe_kopie = dclone($original);

my $einfache_kopie = {};
%$einfache_kopie = %$original;

$tiefe_kopie->{sub1}{sub2}{foo} = "neu";
say "# Vergleich nach Änderung Tiefe Kopie";
_dump( 'Original' => $original );
_dump( 'Tiefe_Kopie' => $tiefe_kopie );


$einfache_kopie->{sub1}{sub2}{foo} = "hier stand mal bar";
say "# Vergleich nach Änderung einfache Kopie";
_dump( 'Original' => $original );
_dump( 'Einfache_Kopie' => $einfache_kopie );


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
# Vergleich nach Änderung Tiefe Kopie
%Original = (
"sub1" => {
"sub2" => {
"foo" => "bar"
}
}
);

%Tiefe_Kopie = (
"sub1" => {
"sub2" => {
"foo" => "neu"
}
}
);

# Vergleich nach Änderung einfache Kopie
%Original = (
"sub1" => {
"sub2" => {
"foo" => "hier stand mal bar"
}
}
);

%Einfache_Kopie = (
"sub1" => {
"sub2" => {
"foo" => "hier stand mal bar"
}
}
);
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Dereferenzierung klappt nicht