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 :

Use of uninitialized value $code_retour in string ne at


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Par défaut Use of uninitialized value $code_retour in string ne at
    Bonjour,

    novice en développement et forcement en perl aussi.
    je développe un script me permettant d'effectuer plusieurs chose sur des photos.

    afin d'essayer de développer correctement, j'utilise les 2 pragma
    strict et warnings.

    j'utilise 2 fois le même code a 2 endroit différent
    une fois dans un SUB cela ne généré pas de message.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sub applic_change ( @_ ) {
    	$image->Resize(width=>$largeur_modif, height=>$hauteur_modif);
    	$image->Normalize() if defined $opts{n};
    	$code_retour = $image->Write("$fichier");
    	$code_retour =~ /(\d+)/;
    	$code_retour = $1;
    	if ($code_retour ne "" ) {
    		if ($code_retour >= "400" ) {
    			p_erreur($code_retour);		
    			print "Certainement fichier en lecture seul \n";
    		}
    	}
    }
    par contre cette version qui n'est pas dans un sub généré le message suivant.
    Use of uninitialized value $code_retour in string ne at ./imagxlarg_v1.2.pl line 67.

    vous pouvez remarquer que le code n'est pas tous a fais identique, mais avec le même code, même problème.
    A ce que je comprend, si la commande ce passe bien, il n'y a pas de code retour, donc je me retrouve avec une variable non valorisé et perl n'aime pas ça.
    J'ai d'ailleurs ajouté le premier if car j'avais le problème dans les 2 morceaux de code sur les if suivant. le fais de mettre le premier if a réglé le pb dans le SUB, mais pas dans l'autre cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	$image = Image::Magick->new;
    	$code_retour = $image->Read($fichier) ;
    	$code_retour =~ /(\d+)/;
    	$code_retour = $1;
    	if ( $code_retour ne "" ) {
    		if ($code_retour >= "400" ) {
    			p_erreur($code_retour);		
    			print "Certainement inexistant ou format non reconnue \n";
    		}
    	}
    Merci pour toute réponse (explication, solution)

    voici le script complet, pour ceux qui ont plus de temps et peuvent emmètre une critique.
    Je précise, qu'il doit encore évoluer. Pour le moment je fais encore une partie du travail a la main et petit à petit j'ajoute les taches au script.

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
    #!/usr/bin/perl
     
    # Version 1.2
     
    ## Commentaire
    # permet de réduire proportionnellement une photo en prenant le plus grand coté hauteur ou largeur (paysage ou portrait) comme base.
    # le paramétré de "$taille_max" sera la taille maximum du plus grand coté.
    # Les photos attentent déjà plus petites ou égale ne seront pas modifié. 
     
    # Ajout dans cette version
    # option -n permet la normalisation de l'image traité, pour une meilleur image
    # ajout de l'option permettant de configurer la taille max (-s 1600 pour 1600 pixel).
     
    # reste a faire
    # Gestion des erreurs 
    # gestion des valeur par defaut (version plus propre).
     
    # Oblige a ecrire du code propre.
    use strict;
    use warnings;
     
    ## Declaration des variables local
     
    my $taille_max;
    my $image;
    my $fichier;
    my $largeur;
    my $hauteur;
    my $ratio;
    my $largeur_modif;
    my $hauteur_modif;
     
    my $code_retour;
    ############
     
    ## Declaration des SUB 
    # evite les problemes de prototypage
    sub applic_change ( @_ );
    sub utilisation ();
    sub p_erreur ($);
     
    ###########
     
    # Active l'utilisation de la class image::magic
    use Image::Magick;
    use Getopt::Std;
    ###########
     
    ## Gestion des options
    my %opts;
    getopts( 'ns:', \%opts ) or utilisation();
     
    $taille_max="1024";
    $taille_max="$opts{s}" if defined $opts{s};
    ###########
     
    ## Traitement de chaque fichier mis en paramétré
    foreach ( @ARGV ) {
    	# Fichier a traiter
    	$fichier=$_;
     
    	# Ouverture du fichier image
    	$image = Image::Magick->new;
    	$code_retour = $image->Read($fichier) ;
    	$code_retour =~ /(\d+)/;
    	$code_retour = $1;
    	if ( $code_retour ne "" ) {
    		if ($code_retour >= "400" ) {
    			p_erreur($code_retour);		
    			print "Certainement inexistant ou format non reconnue \n";
    			next ; #### NE FONCTIONNE PAS
    		}
    	}
     
    	# recupere les valeurs de hauteur et largeur
    	( $largeur, $hauteur ) = $image->Get('width','height');
     
    	## redimensionnement l'image si plus grand que la taille paramétré
    	# verifie quelle est le coté le plus grand 'portrait ou paysage)
    	if ($largeur >= $hauteur) {
    		# redimensionne proportionnellement en prenant comme base la largeur
    		if ($largeur >= $taille_max) {
    			$ratio = ($largeur/$taille_max);
    			$largeur_modif = int($largeur/$ratio);
    			$hauteur_modif = int($hauteur/$ratio);
    			applic_change($fichier,$largeur_modif,$hauteur_modif);
    		}
    	}
    	else {
    		# redimensionne proportionnellement en prenant comme base la hauteur
    		if ($hauteur >= $taille_max ) {
    			$ratio = ($hauteur/$taille_max);
    			$largeur_modif = int($largeur/$ratio);
    			$hauteur_modif = int($hauteur/$ratio);
    			applic_change($fichier,$largeur_modif,$hauteur_modif);
    		}
    	}
    }
    ############
     
    ## SUB
    # effectue les traitement sur l'image.
    sub applic_change ( @_ ) {
    	$image->Resize(width=>$largeur_modif, height=>$hauteur_modif);
    	$image->Normalize() if defined $opts{n};
    	$code_retour = $image->Write("$fichier");
    	$code_retour =~ /(\d+)/;
    	$code_retour = $1;
    	if ($code_retour ne "" ) {
    		if ($code_retour >= "400" ) {
    			p_erreur($code_retour);		
    			print "Certainement fichier en lecture seul -2 \n";
    	#		next ; #### NE FONCTIONNE PAS
    		}
    	}
    }
     
    # message renseignant sur l'utilisation du programme.
    sub utilisation () {
    	print "utilisation :  $0 [-n -s nb_pixel] fichier \n";
    	print "-n l'emploie de cette option vas normaliser la photo. L'équivalent d'un améliorer sur les outils graphique" ;
    	print "Je rappel donc que cette option modifie l'image. Souvent pas trop mal !!! \n";	
    	print "-s nb_pixel représente le nombre de pixel que doit mesurer le coté le plus large \n";
     
    }
     
    # permet d'avoir au moins une ligne standard pour les erreurs 
    # permet une recherche facile dans les logs de tous les fichiers en erreur.
    sub p_erreur ($) {
    	print "Erreur $1 sur le fichier $fichier \n";
    }

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Par défaut Désolé c'était dans la FAQ
    et oui j'ai trouver la réponse dans la FAQ. J'ai pas tous de suite fais le raprochement.

    http://perl.developpez.com/faq/perl/...nB2#sectionB26

    J'ai créé un SUB pour gérér ce defined, mais il semble qu'il n'aime pas le next dans les sub. J'ai donc de nouveau warning.
    je l'ai 1 fois ou 2 fois celon l'endroit ou est appelé le module

    Exiting subroutine via next at ./imagxlarg_v1.2.pl line 127.
    Exiting subroutine via next at ./imagxlarg_v1.2.pl line 127.

    Je vais relire encore une fois la FAQ.

    voila le nouveau 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
    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    #!/usr/bin/perl
     
    # Version 1.2
     
    ## Commentaire
    # permet de reduire proportionnelement une photo en prenant le plus grand coté hauteur ou largeur (paysage ou portrait) comme base.
    # le parametre de "$taille_max" sera la taille maximum du plus grand coté.
    # Les photos attentent deja plus petites ou egale ne seront pas modifié. 
     
    # Ajout dans cette version
    # option -n permet la normalizasion de l'image traité, pour une meilleur image
    # ajout de l'option permettant de configurer la taille max (-s 1600 pour 1600 pixel).
     
    # reste a faire
    # Gestion des erreurs 
    # gestion des valeur par defaut (version plus propre).
     
    # Oblige a ecrire du code propre.
    use strict;
    use warnings;
     
    ## Declaration des variables local
     
    my $taille_max;
    my $image;
    my $fichier;
    my $largeur;
    my $hauteur;
    my $ratio;
    my $largeur_modif;
    my $hauteur_modif;
     
    my $code_retour;
    ############
     
    ## Declaration des SUB 
    # evite les problemes de prototypage
    sub applic_change ( @_ );
    sub utilisation ();
    sub p_erreur ($);
    sub bad_retour ($);
     
    ###########
     
    # Active l'utilisation de la class image::magic
    use Image::Magick;
    use Getopt::Std;
    ###########
     
    ## Gestion des options
    my %opts;
    getopts( 'ns:', \%opts ) or utilisation();
     
    $taille_max="1024";
    $taille_max="$opts{s}" if defined $opts{s};
    ###########
     
    ## Traitement de chaque fichier mis en parametre
    foreach ( @ARGV ) {
    	# Fichier a traiter
    	$fichier=$_;
     
    	# Ouverture du fichier image
    	$image = Image::Magick->new;
    	$code_retour = $image->Read($fichier) ;
    	$code_retour =~ /(\d+)/;
    	$code_retour = $1;
    	bad_retour $code_retour if defined $code_retour;
     
    	# recupere les valeurs de hauteur et largeur
    	( $largeur, $hauteur ) = $image->Get('width','height');
     
    	## redimmentionne l'image si plus grand que la taille parametre
    	# verifie quelle est le coté le plus grand 'portrait ou paysage)
    	if ($largeur >= $hauteur) {
    		# redimentionne proportionellement en prenant comme base la largeur
    		if ($largeur >= $taille_max) {
    			$ratio = ($largeur/$taille_max);
    			$largeur_modif = int($largeur/$ratio);
    			$hauteur_modif = int($hauteur/$ratio);
    			applic_change($fichier,$largeur_modif,$hauteur_modif);
    		}
    	}
    	else {
    		# redimentionne proportionellement en prenant comme base la hauteur
    		if ($hauteur >= $taille_max ) {
    			$ratio = ($hauteur/$taille_max);
    			$largeur_modif = int($largeur/$ratio);
    			$hauteur_modif = int($hauteur/$ratio);
    			applic_change($fichier,$largeur_modif,$hauteur_modif);
    		}
    	}
    }
    ############
     
    ## SUB
    # effectue les traitement sur l'image.
    sub applic_change ( @_ ) {
    	$image->Resize(width=>$largeur_modif, height=>$hauteur_modif);
    	$image->Normalize() if defined $opts{n};
    	$code_retour = $image->Write("$fichier");
    	$code_retour =~ /(\d+)/;
    	$code_retour = $1;
    	bad_retour $code_retour if defined $code_retour;
    }
     
    # message renseignant sur l'utilisation du programme.
    sub utilisation () {
    	print "utilisation :  $0 [-n -s nb_pixel] fichier \n";
    	print "-n l'emploie de cette option vas normaliser la photo. L'equivalent d'un amelioerer sur les outils graphique" ;
    	print "Je rappel donc que cette option modifie l'image. Souvent pas trop mal !!! \n";	
    	print "-s nb_pixel représente le nombre de pixel que doit messurer le coté le plus large \n";
    }
     
    # permet d'avoir au moins une ligne standart pour les erreurs 
    # permet une recherche facile dans les logs de tous les fichiers en erreur.
    sub p_erreur ($) {
    	print "Erreur $1 sur le fichier $fichier \n";
    }
     
    sub bad_retour ($) {
    	if ($code_retour >= "400" ) {
    			p_erreur($code_retour);		
    			print "Certainement inexistant ou format non reconue \n";
    			next ; #### NE FONCTIONNE PAS
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Use of uninitialized value in string
    Par lokomass dans le forum Programmation et administration système
    Réponses: 10
    Dernier message: 25/04/2013, 15h19
  2. Use of uninitialized value $valhier in string at
    Par mikael2235 dans le forum Langage
    Réponses: 17
    Dernier message: 19/03/2012, 09h20
  3. Use of uninitialized value in concatenation (.) or string
    Par pontarose dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2011, 13h26
  4. Use of uninitialized value in string ne at
    Par Gad29 dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 09/05/2007, 13h49
  5. [langage] Use of uninitialized value
    Par Batou dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2005, 10h28

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