salut,

Je suis debutant en perl et je voulais essayer de parser un fichier xml donc j'ai recuperer un code en faisant une recherche sur le forum mais il y a certaine chose que je ne comprend pas.
Voila le code
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
#!/usr/bin/perl
 
 
use XML::Parser;
 
# initialize the parser
my $parser = XML::Parser->new( Handlers => 
{
Start=>\&handle_start,
End=>\&handle_end,
});
$parser->parsefile( "./prot.xml" );
 
my @stack;
 
sub handle_start {
	my($name, $desc);
	my($protein, %attrs ) = @_;
	push( @stack, { protein=>$protein});
	if( %attrs ) {
		while( my( $key, $value ) = each( %attrs )) {
		if ($key eq "protein_name") {
			$name = $value;
			open FILE, ">>./Result.txt" or die "Peut pas ouvrir Result.txt !!";
			print FILE "$name\t";
			}
		if ($key eq "protein_description") {
			$desc = $value;
			open FILE, ">>./Result.txt" or die "Peut pas ouvrir Result.txt !!";
			print FILE "$desc\n";
			}
		}
	}
}
 
sub handle_end {
   #Do nothing ! 
}
my($protein, %attrs ) = @_;
cela signifie que ma fonction aura deux variables, un scalaire et une table de hachage;mais pourquoi on n'a pas rajouter
my($name, $desc);
ce sont pourtant des variable ??

push( @stack, { protein=>$protein});
cette partie du code sert uniquement à alimenter un tableau avec protein=>nom de la proteine , il appeler dans la fonction seulement, il n'est pas vitale pour le code ?

if( %attrs ) {
cela signifie si ma table de hachage existe ?vu qu'on la declarer en haut forcement elle existe.

while( my( $key, $value ) = each( %attrs )) {
je n'ai pas trop saisi cette partie ..??

Mercii