Pourquoi pas, ça peut toujours servir .
Pourquoi pas, ça peut toujours servir .
- 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 !
Une alternative
en version "la plus courte" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 my @level = qw(1 1 2 2 1 2 3 2 1 1 1 2 3 1); my @stack = (); foreach my $level ( @level ) { $stack[$#stack = $level - 1]++; print join( '.', @stack ), "\n"; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 my @l = qw(1 1 2 2 1 2 3 2 1 1 1 2 3 1); my @s = (); foreach ( @l ) { $s[$#s = $_ - 1]++; print join( '.', @s ), "\n"; }
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
Décidemment . Une explication pour les novices serait intéressante.
- 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 !
Arrggg , moi non plus !
Petites explications ??
Si je peux me permettre :
$#stack est la variable qui contient la valeur du dernier élément de la liste @stack. Donc, en la modifiant on modifie cet indice et donc la taille de @stack.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 my @level = qw(1 1 2 2 1 2 3 2 1 1 1 2 3 1); my @stack = (); foreach my $level ( @level ) { $stack[$#stack = $level - 1]++; print join( '.', @stack ), "\n"; }
Maintenant, l'instruction $stack[$#stack = $level - 1]++; :
Grâce à la priorité des opérateurs, Philou67430 a réussi à concaténer deux opérations : la modification de la taille de @stack (en modifiant $#stack) et l'incrémentation de la dernière valeur.
En fait, Perl va commencer par évaluer l'intérieur des crochets pour calculer l'indice de la liste auquel on veut accéder. Ce qui a pour effet de modifier $#stack.
la post-incrémentation (le ++) sera effectuée après.
C'est comme si vous faisiez :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $#stack = $level - 1; $stack[$#stack] = $stack[$#stack] + 1;
Tout à fait dimitry.
Au début, je voulais écrire :et incrémenter $stack[-1] séparément... croyant que scalar acceptait d'être un "left-value", comme keys peut l'être :
Code : Sélectionner tout - Visualiser dans une fenêtre à part scalar(@stack) = $level;par exemple défini un hash de 1000 clés (au minimum).
Code : Sélectionner tout - Visualiser dans une fenêtre à part keys(%hash) = 1000;
Au final, jouer sur la taille du tableau en modifiant l'indice de son dernier élément est bien pratique puisque cela permet de réaliser dans la même expression, l'incrémentation de ce dernier élément.
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
Je vous souhaite de bonnes vacances
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
Merci ! A toi aussi.
Pour moi c'est ce soir !
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