Puisque le but est (visiblement) de faire le plus court possible, pas forcément le plus lisible, je propose quelques modifications.
perl -ne 'BEGIN{use Time::HiRes qw/gettimeofday/} push(@t,0+gettimeofday()); shift(@t) if @t>5; printf("%3.0f bpm",60*(@t-1)/($t[-1]-$t[0])) if @t>1' Tout d'abord on peut économiser tout le bloc BEGIN avec -M. Bon remplacer BEGIN{} par -M'', ça ne fait pas gagner énormément de caractères, mais je trouve ça beaucoup plus lisible.
perl -M'Time::HiRes qw/gettimeofday/' -ne 'push(@t,0+gettimeofday()); shift(@t) if @t>5; printf("%3.0f bpm",60*(@t-1)/($t[-1]-$t[0])) if @t>1' Ensuite on peut gagner quelques caractères en supprimant le push (qui rajoute un élément en fin de liste) par l'expression $t[@t]=. Le += permet de conserver (implicitement) la notation 0+.
En contexte scalaire, @t retourne le nombre d'élément du tableau. Comme le tableau commence à 0, écrire à l'indice @t revient à rajouter un élément.
perl -M'Time::HiRes qw/gettimeofday/' -ne '$t[@t]+=gettimeofday(); shift(@t) if @t>5; printf("%3.0f bpm",60*(@t-1)/($t[-1]-$t[0])) if @t>1' On peut également remplacer @t-1 par $#t. Et remplacer @t>1 par $#t (implicitement $#t!=0, mais comme on sait que le nombre d'éléments d'un tableau ne peut être négatif, c'est équivalent à $#t>0 et donc équivalent à @t>1).
Au passage on supprime plein de parenthèses inutiles.
perl -M'Time::HiRes qw/gettimeofday/' -ne '$t[@t]+=gettimeofday; shift @t if @t>5; printf "%3.0f bpm",60*$#t/($t[-1]-$t[0]) if $#t'
# Suggestions
Posté par George_abitbol . En réponse au journal TapTempo en une ligne. Évalué à 10.
Puisque le but est (visiblement) de faire le plus court possible, pas forcément le plus lisible, je propose quelques modifications.
Tout d'abord on peut économiser tout le bloc BEGIN avec -M. Bon remplacer BEGIN{} par -M'', ça ne fait pas gagner énormément de caractères, mais je trouve ça beaucoup plus lisible.perl -ne 'BEGIN{use Time::HiRes qw/gettimeofday/} push(@t,0+gettimeofday()); shift(@t) if @t>5; printf("%3.0f bpm",60*(@t-1)/($t[-1]-$t[0])) if @t>1'
Ensuite on peut gagner quelques caractères en supprimant le push (qui rajoute un élément en fin de liste) par l'expression $t[@t]=. Le += permet de conserver (implicitement) la notation 0+.perl -M'Time::HiRes qw/gettimeofday/' -ne 'push(@t,0+gettimeofday()); shift(@t) if @t>5; printf("%3.0f bpm",60*(@t-1)/($t[-1]-$t[0])) if @t>1'
En contexte scalaire, @t retourne le nombre d'élément du tableau. Comme le tableau commence à 0, écrire à l'indice @t revient à rajouter un élément.
On peut également remplacer @t-1 par $#t. Et remplacer @t>1 par $#t (implicitement $#t!=0, mais comme on sait que le nombre d'éléments d'un tableau ne peut être négatif, c'est équivalent à $#t>0 et donc équivalent à @t>1).perl -M'Time::HiRes qw/gettimeofday/' -ne '$t[@t]+=gettimeofday(); shift(@t) if @t>5; printf("%3.0f bpm",60*(@t-1)/($t[-1]-$t[0])) if @t>1'
Au passage on supprime plein de parenthèses inutiles.
perl -M'Time::HiRes qw/gettimeofday/' -ne '$t[@t]+=gettimeofday; shift @t if @t>5; printf "%3.0f bpm",60*$#t/($t[-1]-$t[0]) if $#t'