Bonjour
Je n'arrive pas a trouver la syntaxe permettant de rechercher une clé dans un hash qui est stocké dans une variable.
Dans le premier cas pas de problème la valeur retourne bien "yes"
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
	my $myhost = 'hostname1';
 
	my %Host = (
				'hostname1' => 12,
				'hostname2' => 13,
				'hostname3' => 14,
				'hostname4' => 15
 
	);
 
	if (grep { /$myhost/ } keys %Host)
	{
		print 'yes';
	}else{
	print 'no';
	}
dans ce cas je n'arrive pas a trouver la syntaxe que doit prendre le %$HashHost

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
	my $myhost = 'hostname1';
 
	my %Host = (
				'hostname1' => 12,
				'hostname2' => 13,
				'hostname3' => 14,
				'hostname4' => 15
 
	);
 
	my $HashHost = \%Host;
 
	if (grep { /$myhost/ } keys %$HashHost)
	{
		print 'yes';
	}else{
	print 'no';
	}
Merci d'avance pour celui qui maitrise mieux que moi les hashes.

L'écriture ci-dessous est plus logique pour l'utilisation d'un variable = hash.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
my $myhost = 'CNF011643';
 
 
my ($HashHost, $table2, $total) = myfunction();
 
	if (grep { /$myhost/ } keys %$HashHost)
	{
		print 'yes ID:'.$HashHost->{$myhost}->{'id_host'};
	}else{
	print 'no';
	}
 
	sub myfunction {
		my %Host = (
					  'FRLT00953454' => {
										  'id_host' => '2574',
										  'id_pays' => '17',
										  'id_zone' => '5'
										},
					  'DE-LTFBPC0VV3RQ' => {
											 'id_host' => '38948',
											 'id_pays' => '15',
											 'id_zone' => '4'
										   },
					  'CNF011643' => {
									   'id_host' => '42098',
									   'id_pays' => '7',
									   'id_zone' => '2'
									 },
					  'PLSSCM-YXH' => {
										'id_host' => '26717',
										'id_pays' => '7',
										'id_zone' => '2'
									  },
					  'FRDT00953037' => {
										  'id_host' => '14538',
										  'id_pays' => '34',
										  'id_zone' => '5'
										},
					  'CNF017212' => {
									   'id_host' => '47667',
									   'id_pays' => '7',
									   'id_zone' => '2'
									 },
					  'CNO050010' => {
									   'id_host' => '50528',
									   'id_pays' => '7',
									   'id_zone' => '2'
									 },
					  'TW8FEKX' => {
									 'id_host' => '37462',
									 'id_pays' => '29',
									 'id_zone' => '2'
								   },
					  'GUE_584' => {
									 'id_host' => '13692',
									 'id_pays' => '22',
									 'id_zone' => '2'
								   }					 
		);
 
	my %table1 = (
				'hostname1' => 12,
				'hostname2' => 13,
				'hostname3' => 14,
				'hostname4' => 15
 
	);	
 
	my $TTT = 5;
 
		return (\%Host, \%table1, $TTT );
	}
Tout fonctionne bien dans ce test mais dans mon code je pense que je dois avoir une valeur de clé a vide, du coup j'ai rajouté
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if (length($myhost) > 0 && grep { /$myhost/ } keys %$HashHost)