Merci, modification faite
Merci, modification faite
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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!
Merci pour ta remarque. Modification effectuée.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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 :
$ 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é
Si c'est utile, say
Il faut que le module Module::CoreList soit installé pour pouvoir l'utiliser.C:\>corelist POSIX
'corelist' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
Or ce module est dans le core à partir de la version 5.8.9 de Perl et pas avant.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Mmmm, étrange :
$ 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é
Si c'est utile, say
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).
Maintenant, on peut écrire en version 5.10
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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"
Edit : peut-être dans cette rubrique ? http://perl.developpez.com/faq/perl/?page=sectionB2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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"
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é
Si c'est utile, say
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
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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.
, bonnes remarques,
Dès que j'ai un peu de temps, je mettrais à jours la FAQ Perl.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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!
Pourquoi pas. Ce n'est pas une mauvaise idée, je mettrais à jour la FAQ quand j'aurais un peu de temps.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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
et a priori le switch fonctionne sans utiliser perl 6 comme spécifié dans la FAQ :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 perl -v This is perl, v5.10.0 built for i486-linux-gnu-thread-multi
Nota: je n'ai pas trouvé non plus ce point (sur les switch) dans la super belle doc de Sébastien Aperghis-Tramoni
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 use Switch; # .. switch ($$type[$i]) { case 1 { print 'foo' } case 2 { print 'bar' } #... else { print 'bidule' } }
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.
Merci pour tes remarques. La FAQ a été mise à jours.
Merci.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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:
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 : 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 #!/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'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 my %hash; $hash{nouvelle_cle} .= "nouvelle_valeur";
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 écritau lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part $hash{nouvelle_cle} = "nouvelle_valeur";car à l'origine, $hash{nouvelle_cle} n'existe pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $hash{nouvelle_cle} .= "nouvelle_valeur";
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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 !
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 :
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à.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $hash{nouvelle_cle} .= "nouvelle_valeur";
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 :
Mais on peut aussi se contenter de vérifier que la valeur n'est pas définie (que la clé existe ou non) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $hash{nouvelle_cle} = "nouvelle_valeur" if !exists $hash{nouvelle_cle};
Code : Sélectionner tout - Visualiser dans une fenêtre à part $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é
Si c'est utile, say
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager