IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Probleme: mauvais retour de fonction


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Par défaut Probleme: mauvais retour de fonction
    Salut à tous,

    C'est mon premier message sur ce forum... je suis super ému.
    Donc voilà, je ne suis pas expert en Perl, mais j'ai un truc qui me semble bizarre dans le code suivant.
    La fonction getChangelistDescribe doit retourner un tableau $describe. Lorsque j'affiche la 1ere valeur de ce tableau dans la fonction, j'obtiens bien une valeur cohérente:

    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
    sub getChangelistDescribe($$)
    {
    	my $self   = shift;
    	my $chg_no = shift;
    	
    	return if (!defined($chg_no));
    	
    	my $p4 = $self->P4Connect();
    	my $describe = $p4->Run("describe", $chg_no);	
    	print STDOUT "DESCR == @{$describe}[0]";
    	return 0 if (!$self->GetP4Errors($p4, "changelist"));	
    	$p4->Disconnect();
    		
    	return $describe;
    }
    Mais lorsque je demande d'afficher ce que retourne cette fonction, je n'obtiens rien ("DESCRIBE === " s'affiche):

    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
    sub insertReleaseNotes($$$)
    {
    	my $self       = shift;    
    	my $p4profile  = shift;
    	my $changelist = shift;
       
    	return if (!defined($p4profile) ||
    			   !defined($changelist));
    
    	foreach my $change (@{$changelist})
    	{
    		#For each changelist, get a description
    	my $describe = $p4profile->getChangelistDescribe($change);
    
    		my %infos;
    		# If the description exists
    		if (defined($describe))
    		{
    			print STDOUT "\n DESCRIBE === @{$describe}[0]";
    ...
    ...
    Quelqu'un voit il une erreur là-dedans ?
    Merci d'avance

    K.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    oui : tu appelles getChangelistDescribe avec un seul argument, alors qu'elle est programmée pour sortir si elle n'a pas le second (change_no).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Par défaut
    J'ai remarqué cela également mais la fonction getChangelistDescribe va bien jusqu'au bout car j'arrive à afficher :
    print STDOUT "DESCR == @{$describe}[0]";

    Si j'afficher la valeur de la variable $chg_no, j'obtiens bien la valeur attendue... Donc le fait de ne passer qu'un seul argument à cette fonction ne semble pas poser de probleme.
    Comme je l'ai dit, je ne suis pas expert en Perl, mais il me semble qu'il n'est pas utile de préciser le $self lorsque l'on appelle une fonction, cela est fait implicitement. C'est pourquoi, lorsque j'appelle getChangelistDescribe, je ne passe qu'un seul argument.

    Merci pour ta réponse en tout cas.
    K.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    je ne connais pas tes histoires de $self... quant à ton DESCR ==, il apparaît au moins à deux endroits dans ton code, ce n'est donc pas un test suffisant. On va voir ce qui se passe vraiment :
    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
    sub getChangelistDescribe($$)
    {
    print "entrée dans getChangelistDescribe\n" ;
    	my $self   = shift;
    	my $chg_no = shift;
    print "avec les arguments |$self| et |$chg_no|\n" ;	
    	return if (!defined($chg_no));
    print "chg_no est défini\n";	
    	my $p4 = $self->P4Connect();
    	my $describe = $p4->Run("describe", $chg_no);	
    print "getChangelistDescribe : DESCR == @{$describe}[0] \n"; 
    	return 0 if (!$self->GetP4Errors($p4, "changelist"));	
    # c'est normal de sortir avant le Disconnect ?
    	$p4->Disconnect();
    print "résultat obtenu : |$describe|\n";			
    	return $describe;
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Par défaut
    Je ne peux pas faire ces tests pour le moment (je les ferai lundi) mais j'ai déjà fait ce genre de test. Je referai le test mais je peux déjà te dire ce que j'obtiendrai, mis à part pour le $self car je ne sais ce qu'elle doit retourner exactement. En tout cas, pour les 2 derniers print, j'aurai ca:

    "getChangelistDescribe : DESCR == commentaire au sujet de..." (j'obtiens ce que je veux.

    ET

    "résultat obtenu : |ARRAY(0xCFF023A2)|" (describe étant un tableau).

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    je suppose que tu veux dire que $describe est une référence à un tableau ?

    tu m'expliquerais ton histoire de $self ? (je n'ai encore jamais utilisé le prototypage des fonctions).

Discussions similaires

  1. Probleme valeur retour fonction
    Par punkydev dans le forum x86 32-bits / 64-bits
    Réponses: 33
    Dernier message: 07/05/2015, 21h20
  2. Réponses: 6
    Dernier message: 16/01/2011, 16h33
  3. Mauvais retour de fonction
    Par scary dans le forum Débuter
    Réponses: 7
    Dernier message: 22/02/2009, 19h40
  4. Probleme de retour avec les fonctions
    Par yorukaze dans le forum Tkinter
    Réponses: 9
    Dernier message: 04/02/2008, 09h49
  5. Réponses: 11
    Dernier message: 07/01/2008, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo