Oui, c'est tout-à-fait le même esprit. La seule différence est que tu remplis la table de distribution au fur et à mesure de tes besoins, alors que je pouvais dans le cas des 26 lettres de l'alphabet me permettre de l'initialiser au tout début.
Juste deux petits points:
Fais attention à l'indentation. J'ai d'abord cru qu'il manquait une accolade fermante au if le plus interne, avant de voir que tu avais deux accolades l'une en dessous de l'autre. Franchement, soigner son indentation permet d'économiser des heures de débogage.
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 while (<$in>) { if($_ =~ /cequejecherche.+?cequejetrouve(.+?)\]/){ my $result = $1; $result =~ s/ /_/g; if ( ! exists ( $dispatch{$result})) { $dispatch{$result} = create_sub($result); $dispatch{$result}->($_); }else{ $dispatch{$result}->($_); } } }
Le deuxième point: j'éviterais de répéter deux fois la ligne $dispatch{$result}->($_);, par exemple en écrivant:
ou même:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if ( ! exists ( $dispatch{$result})) { $dispatch{$result} = create_sub($result); } $dispatch{$result}->($_);
ce qui réduit le "bruit" dû aux parenthèses et accolades trop nombreuses. Mais j'ai compris que tu n'aimais pas les modificateurs d'instructions (les if ou unless placés après l'instruction). Moi, j'aime bien, parce que cela permet ici de réduire tes six lignes de code à seulement deux, et cette réduction permet de voir plus de code à l'écran et donc d'avoir moins besoin de naviguer dans le code pour comprendre ce qu'il fait. Mais c'est purement affaire de goût, tu fais comme tu veux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $dispatch{$result} = create_sub($result) unless exists $dispatch{$result} $dispatch{$result}->($_);
Tu peux même écrire:
si ça te chante. Je trouve cela assez amusant, mais ce n'est pas forcément très lisible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 exists $dispatch{$result} or $dispatch{$result} = create_sub($result);
A toutes fins utiles, faire suivre au webmaster...
Bonjour,
Ce jour 22/11/14 à 12h15 j'ai consulté ma boîte mails.
Il y avait une notification de developpez.com d'une intervention de Jedaï sur le présent sujet.
Je ne vois aucun post de Jedaï dans toute la discussion à 14h20.
Voici le contenu du message, je le mets en QUOTE pour conserver les liens :
Bonjour dmganges,
Jedai vient de répondre à une discussion à laquelle vous êtes abonné :
Forum : Langage (sur Forum du club des développeurs et IT Pro)
Intitulé de la discussion : supprimer les doublons d'un fichier
Vous pouvez consulter le nouveau message en suivant ce lien :
http://www.developpez.net/forums/d14...blons-fichier/
Contenu du message :
***************
---Citation (Envoyé par Philou67430)---
Un algorithme intermédiaire entre les 1500 lignes de code où chaque handle de fichier est stocké dans une variable séparée, et un tableau dispatcher de fermetures anonymes est le tableau de handle de fichier, qui nécessite lui aussi un nombre limité de ligne de code pour ouvrir et écrire dans le fichier adhoc, et une factorisation des appels d'ouverture et d'écriture dans ces fichiers (que ce soit en perl, en C/C++ ou Java)
---Fin de la citation---
Toutefois cela nécessite d'ouvrir puis de refermer un fichier à chaque tour de boucle, ce qui peut avoir un coût non-négligeable. D'un autre côté cela évite de s'inquiéter de la limite de handles ouverts par processus présente dans la plupart des OS...
-- Jedaï *************** Il peut y avoir eu d'autres réponses, mais vous ne recevrez pas de nouvelle notification avant votre prochaine visite du forum. Cordialement, L'équipe Forum du club des développeurs et IT Pro ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Informations sur le désabonnement : Pour supprimer votre abonnement à cette discussion, veuillez suivre ce lien : http://www.developpez.net/forums/sub...dcf9a06f32ffeb Pour supprimer votre abonnement à toutes les discussions, veuillez suivre ce lien : http://www.developpez.net/forums/sub...n&folderid=all
Franchement, je ne comprends pas le message de Jedaï. A mon humble avis, il a réagi au post de Philou, puis s'est rendu compte qu'il avait mal compris et a décidé de supprimer son message. C'est ma seule explication.
Oui, j'ai écrit cette réponse avant de m'apercevoir que tu parlais également d'un tableau de handle alors que je pensais que tu introduisais la possibilité d'utiliser un tableau de noms de fichier (qui est en effet la variante encore plus bas niveau de la technique proposée dans ce sujet, ne nécessitant même pas que les handles soient de première classe) car la technique du tableau de handle avait déjà été évoqué avant ta réponse.
Après relecture, je me suis rendu compte de ma méprise et ai donc supprimé mon message qui du coup n'apportait guère au sujet (à part une référence à la limite éventuelle du nombre de handle par processus, toujours bonne à garder en tête, quitte à la modifier si elle est trop pénible).
Apparemment un mail t'avait déjà été envoyé... Ça m'apprendra à poster sans relire !
--
Jedaï
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