Bonjour,
je suis confronté à un problème de compréhension.
Je déclare une table de hachage dans une fonction, passe une référence à cette table à une seconde fonction qui modifie son contenu.
Si je ne retourne pas une référence de la table de hachage à la fonction appelante, je ne dispose pas du contenu modifié.
Je pensais qu'en utilisant les références, la fonction appelante disposerait automatiquement du contenu modifié par la fonction appelée.
Merci pour vos lumières et éclaircissements.
Source:
Exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
42
43 #!/usr/bin/env perl use strict; use warnings; use feature 'say'; use Data::Dumper; sub process { my %h_ind; $h_ind{'courrier'} = 0; say 'dump départ fonction'; print Dumper(%h_ind) . "\n"; my $ref = f1 ( \%h_ind); say 'dump retour fonction'; print Dumper(%h_ind) . "\n"; %h_ind = %$ref; say 'dump retour fonction avec déréférencement variable de retour'; print Dumper(%h_ind) . "\n"; } sub f1 { my ( $r_h ) = @_; my %h = %$r_h; $h{'personne'} = 0; $h{'document'} = 0; say 'dump dans fonction'; print Dumper(%h) . "\n"; return \%h; } sub main { process(); } exit main(@ARGV);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 $ ./test_refs.pl dump départ fonction $VAR1 = 'courrier'; $VAR2 = 0; dump dans fonction $VAR1 = 'courrier'; $VAR2 = 0; $VAR3 = 'document'; $VAR4 = 0; $VAR5 = 'personne'; $VAR6 = 0; dump retour fonction $VAR1 = 'courrier'; $VAR2 = 0; dump retour fonction avec déréférencement variable de retour $VAR1 = 'courrier'; $VAR2 = 0; $VAR3 = 'document'; $VAR4 = 0; $VAR5 = 'personne'; $VAR6 = 0;
Partager