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.
par contre cette version qui n'est pas dans un sub généré le message suivant.
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"; } } }
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.
Merci pour toute réponse (explication, solution)
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"; } }
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"; }
Partager