Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 26/01/2009, 13h22   #21
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Merci, modification faite
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2009, 12h51   #22
Schmorgluck
Membre éprouvé
 
Avatar de Schmorgluck
 
Inscription : mai 2006
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : mai 2006
Messages : 354
Points : 479
Points : 479
Quelques petites erreurs dans la section Tests sur les fichiers, à propos des informations renvoyées par stat : l'exemple de code pour en extraire les résultats est erroné. D'une part il comporte un scalaire de trop, $rdev, d'autre part, j'ai testé (pris d'un doute) cette syntaxe pour affecter des variables, mais elle ne fonctionne pas, il manque des parenthèses autour de la liste de scalaires.
__________________
There's nothing like $HOME!
Schmorgluck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2009, 21h41   #23
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Merci pour ta remarque. Modification effectuée.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2009, 20h26   #24
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Pensez à contribuer à l'évolution de la FAQ :

Demande d'une modification,
Demande de rajouts de certaines informations qu'on aurait omis.
Toute suggestion est la bienvenue, même si vous n'avez pas la réponse.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2009, 17h53   #25
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
Je n'ai pas vérifié si la question est dans les FAQ ou pas, mais tant que j'y pense, je la donne tout de même :

[Q] Comment savoir si un module est disponible dans le Core de perl ?

[A] en appelant corelist :

Citation:
$ corelist POSIX

POSIX was first released with perl 5
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2009, 17h59   #26
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Citation:
C:\>corelist POSIX
'corelist' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
Il faut que le module Module::CoreList soit installé pour pouvoir l'utiliser.

Or ce module est dans le core à partir de la version 5.8.9 de Perl et pas avant.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2009, 18h23   #27
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
http://perl.developpez.com/faq/perl/...38#sectionC38b
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2009, 09h15   #28
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
Mmmm, étrange :
Citation:
$ corelist Module::CoreList

Module::CoreList was first released with perl 5.009002
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2009, 12h18   #29
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
A titre indicatif, Djibril (et on peut sans doute l'ajouter à une FAQ), il existe deux nouveaux opérateurs depuis perl 5.10 : // et //=
$a // $b est similaire à defined($a) ? $a : $b
$a //= $b est similaire à $a = defined($a) ? $a : $b

C'est bien pratique pour initialiser les variables "undef" avec une valeur, tout en considérant qu'un valeur fausse peut être une valeur initiale correcte.

Exemple :
avant la 5.10, si l'on utilisait la construction $a ||= "valeur par défaut", on pouvait initialiser à la valeur par défaut si $a était défini et nul (ou vide pour une chaine).
Code :
1
2
3
use Getopt::Long;
GetOptions("a=i" => \$a);
$a ||= 10; # on initialise à 10 même si l'utilisateur a fourni l'option "-a 0"
Maintenant, on peut écrire en version 5.10
Code :
1
2
3
use Getopt::Long;
GetOptions("a=i" => \$a);
$a //= 10; # on initialise à 10 seulement si l'utilisateur n'a pas fourni l'option "-a"
Edit : peut-être dans cette rubrique ? http://perl.developpez.com/faq/perl/?page=sectionB2
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2009, 17h59   #30
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Salut à tous,

Afin de faire une petite mise à jour de la FAQ Perl, tout forumeur débutant ou non est bienvenu pour nous donner un coup de main.

Le but est de relire la FAQ Perl, afin de corriger les fautes d'orthographe, les phrases, les bugs dans les codes s'il y en a, de rajouter des questions si besoin.
Vous n'êtes pas obligé de tout lire, juste ce qui vous intéresse. Si vous avez envi d'une modification, faites le nous savoir dans ce même topic en mentionnant le lien de la question ou l'intitulé de la nouvelle.

Une section de perl 5.8 à 5.10 va aussi être créée. Donc toute contribution est la bienvenue pour y mettre des nouvelles questions en rapport avec les nouveautés de Perl 5.10. Vous pouvez vous baser sur la belle documentation d’un mongeur français (Sébastien Aperghis-Tramoni).

Merci à tous
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2009, 10h09   #31
50Nio
Membre actif
 
Inscription : août 2009
Messages : 154
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 154
Points : 193
Points : 193
On a des questions récurrentes sur le forum de "Est-ce qu'on peut faire ça en Perl", et c'est vrai que quand on débute, on n'a pas forcément la visibilité sur cpan.org.

Dans la FAQ, dans cette section:
http://perl.developpez.com/faq/perl/?page=sectionC38

Il faudrait peut-être ajouter -ou alonger l'existant- pour qu'il soit bien clair que sur cpan on trouve absolument tout sur tout ou presque, et que ce sont des outils (globalement) propres et officiels, à utiliser sans crainte.

Exemple:
"Comment chercher si un module existe pour ce que je veux faire ?
Pour toutes les problématiques du genre:
Comment faire un truc en Perl ?
Personne n'a une toolbox pour faire ça ?
=> Cpan a peut-être la solution.
Peut-on envoyer des mails via snmp en Perl ?
Comment parser facilement un XML en Perl ?
Puis-je gérer les cookies dans Firefox en Perl ?
Comment créer un arbre en Perl ?

L'url http://search.cpan.org permet de faire une recherche parmis tous les modules cpan. On y trouve de véritables boites à outils pour tous les domaines informatiques professionnels comme pour le loisir."

Dans les modules utiles, je mettrais aussi:
Data::Dumper Permet d'afficher n'importe quelle variable, très utile pour debugger un programme
Log::Log4perl Gestion des logs ultra-simple et pratique. A utiliser dès que vos daemon atteignent une certaine complexité.

Ces points sont bien sûr laissés à la libre appréciation des autres membres plus expérimentés de ce forum et à de meilleurs rédacteurs que moi.
Renvoyer les gens vers cpan n'est pas très long.
50Nio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2009, 10h50   #32
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
, bonnes remarques,

Dès que j'ai un peu de temps, je mettrais à jours la FAQ Perl.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2010, 13h50   #33
Schmorgluck
Membre éprouvé
 
Avatar de Schmorgluck
 
Inscription : mai 2006
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : mai 2006
Messages : 354
Points : 479
Points : 479
Ce serait peut-être une bonne idée d'intégrer à la FAQ les conseils de Jedai dans son post Débutants ou expérimentés : Comment écrire du bon code en Perl.

Ma suggestion serait de l'ajouter à la fin de la section S'initier à Perl.

Qu'en pensez vous ?
__________________
There's nothing like $HOME!
Schmorgluck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2010, 14h04   #34
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Pourquoi pas. Ce n'est pas une mauvaise idée, je mettrais à jour la FAQ quand j'aurais un peu de temps.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2010, 13h32   #35
hornetbzz
Membre chevronné
 
Avatar de hornetbzz
 
Homme
Directeur commercial
Inscription : octobre 2009
Messages : 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : France

Informations professionnelles :
Activité : Directeur commercial

Informations forums :
Inscription : octobre 2009
Messages : 481
Points : 719
Points : 719
Envoyer un message via Skype™ à hornetbzz
Super FAQ, claire, lisible, complète, merci et bravo !

3 petits commentaires :

1) Une petite coquille ici: diament s'écrit diamant

2) Une remarque de noob pour le switch :
J'expérimente cette version sous debian lenny
Code :
1
2
perl -v
This is perl, v5.10.0 built for i486-linux-gnu-thread-multi
et a priori le switch fonctionne sans utiliser perl 6 comme spécifié dans la FAQ :
Code :
1
2
3
4
5
6
7
8
use Switch;
# ..
switch ($$type[$i]) {
   case 1 { print 'foo' }
   case 2 { print 'bar' }
	#...
   else { print 'bidule' }
}
Nota: je n'ai pas trouvé non plus ce point (sur les switch) dans la super belle doc de Sébastien Aperghis-Tramoni

Ma suggestion:
Peut-être completer ou mettre à jour ce point conformément à ce post.

3) CGI ERROR 500
Apparemment le truc classique pour les CGI.
Comme j'ai mis un temps certain avant de trouver le pourquoi de cette erreur, j'en fais part:

Si on "détourne" un peu l'utilisation d'un CGI et qu'on ne code pas de sortie, ou tout simplement que l'on code par étape et quel'on n'a pas encore codé de sortie, l'execution mène à une erreur 500, et le log fait apparaitre un "Premature end of script headers", peu évocateur pour le noob que je suis.

C'est un peu déroutant et pourtant pas bien grave.

Donc ma suggestion:
ajouter dans les exemples d'erreur que le codage d'une sortie est nécessaire pour ne pas obtenir une belle erreur 500.
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2010, 19h00   #36
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Merci pour tes remarques. La FAQ a été mise à jours.

Merci.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 13h34   #37
hornetbzz
Membre chevronné
 
Avatar de hornetbzz
 
Homme
Directeur commercial
Inscription : octobre 2009
Messages : 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : France

Informations professionnelles :
Activité : Directeur commercial

Informations forums :
Inscription : octobre 2009
Messages : 481
Points : 719
Points : 719
Envoyer un message via Skype™ à hornetbzz
Par défaut array_diff

Toujours en pleine découverte de Perl et plus habitué à JS et PHP, je cherchais à comparer des tableaux (array ou liste), de type array_diff et array_intersect.

J'ai trouvé des modules tout prêts mais bon, pour la portabilité, j'ai preféré chercher une solution "simple" (merci O'Reilly).

Si ça peut être utile dans la FAQ (Sommaire > S'initier à Perl > Listes), quitte à supprimer le Data:: Dumper:

Code :
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
#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;
 
sub array_diff {
	# arrays @a and @b to be compared
	my (@a, @b) = @_;
 
	my @isect;
	my @union;
	my @diff;
	my $e;
	my %count;
	my %hash_of_arrays;
 
	# check entries
	if ( (ref (\@a) ne "ARRAY") || (ref (\@b) ne "ARRAY") ) {
		print "entries shall be ARRAY";
		exit 0;
	}
 
	# store all keys into an hash $count
	foreach $e (@a, @b) { $count{$e}++ }
 
	# browse the hash $count
	foreach $e (keys %count) {
		# union is simple
		push(@union, $e);
 
		# intersection
		if ($count{$e} == 2) {
			push @isect, $e;
		# difference
		} else {
			push @diff, $e;
		}
	}
 
	# store resulting arrays into an hash of arrays
	$hash_of_arrays{diff} = \@diff;
	$hash_of_arrays{union} = \@union;
	$hash_of_arrays{isect} = \@isect;
 
	return %hash_of_arrays ;
}
 
# Testing the function
my @arr1 = ( "foo", "bar", "truc", "bidule", 1 , 2, 3);
my @arr2 = ( "foo", "car", "truc", "bidule", 1 , 2, 4);
my %result;
 
# global hash result
%result = &array_diff(@arr1, @arr2);
print Dumper(\%result);
 
# diff only
my $diff = $result{diff};
print Dumper($diff);
 
# Diff Output:	'3', 'car',  'bar', '4'
# Union Output :	'truc', '3', 'car',   '2',  'bar',   '1',  '4',  'foo', 'bidule'
# Intersection Ouput :	'truc', '2',  '1',  'foo', 'bidule'
Et un autre petit truc sur les hashes quand on ne connait pas les clés existantes de manière déterministe et qu'on veut en ajouter une :
Code :
1
2
my %hash;
$hash{nouvelle_cle} .= "nouvelle_valeur";
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 13h53   #38
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 506
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 506
Points : 31 606
Points : 31 606
Dans la rubrique Perl, il existe une page source où l'on met des programmes tout fait pour dépanner tout le monde. Pour y participer, il faut donner son code ici.

Pour comparer des tableaux, il faut utiliser le module List::Compare. Il est fait pour cela et s'installe sur toutes les plateformes. De plus, il est plus complet.

Je pourrais d'ailleurs rajouter une question dans les sources pour comparer des tableaux. La FAQ nécessite d'un peu de ménage, du moins, d'aération surtout dans la section liste . Il faudrait que je trouve du temps pour m'y mettre.

si tu veux, je rajoute ton code dans nos sources ??


sinon pour ton hash, on écrit
Code :
$hash{nouvelle_cle} = "nouvelle_valeur";
au lieu de
Code :
$hash{nouvelle_cle} .= "nouvelle_valeur";
car à l'origine, $hash{nouvelle_cle} n'existe pas.
__________________
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 00h12   #39
hornetbzz
Membre chevronné
 
Avatar de hornetbzz
 
Homme
Directeur commercial
Inscription : octobre 2009
Messages : 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : France

Informations professionnelles :
Activité : Directeur commercial

Informations forums :
Inscription : octobre 2009
Messages : 481
Points : 719
Points : 719
Envoyer un message via Skype™ à hornetbzz
J'ai bien vu les modules existants, merci.

Oui si tu veux ajouter ce petit script dans les sources, pas de probleme, en fait je n'avais pas trouvé l'endroit pour Perl (je cherchais un thread dans la FAQ comme c'est le cas pour les bash Linux).

hashes:
En fait, j'avais bien compris comment ajouter une valeur dans un hash.
La concaténation dans ce cas s'appelle "Autovivification", comme précisé sur ce site. Je me suis mal expliqué, mais jettes un oeil au chapitre "autovivification", tu verras mieux l'intéret de cette notation.

Et merci encore pour la bonne maintenance de la section Perl. C'est vraiment bien fait, à jour et complet !
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 11h53   #40
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 633
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 633
Points : 3 079
Points : 3 079
L'autovivification est un mécanisme à effet de bord, qui comme tout effet de bord, n'a pas que des avantages (notamment pour la création des structures à plus d'un niveau).

Du coup, je ne conseille pas son utilisation intentionnelle (il y a déjà assez à faire avec son utilisation non intentionnelle, source de bug).

Par ailleurs, écrire :
Code :
$hash{nouvelle_cle} .= "nouvelle_valeur";
ne fait pas qu'auto-vivifier la nouvelle clé. L'instruction ajoute le texte "nouvelle_valeur" à la valeur existante si la clé existait déjà. Ca ne remplace pas la valeur si elle existe déjà.

Méfiance également, certaines fonctions utilisées sur des éléments de hash n'autovivifient pas (et heureusement), comme la fonction exists et sans doute tous les opérateurs de comparaison. Pour aller plus loin sur l'auto-vivification, un article des mongueurs : http://articles.mongueurs.net/magazi...ag43.html#h1.4

PS : pour écrire une valeur dans une clé si est seulement si la clé n'existe pas, il est préférable d'écrire :
Code :
$hash{nouvelle_cle} = "nouvelle_valeur" if !exists $hash{nouvelle_cle};
Mais on peut aussi se contenter de vérifier que la valeur n'est pas définie (que la clé existe ou non) :
Code :
$hash{nouvelle_cle} //= "nouvelle_valeue";
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h30.


 
 
 
 
Partenaires

Hébergement Web