La façon de comprendre un code est de le décortiquer. Vous savez que ce qui est à l'intérieur des parenthèses se passe avant ce qui est à l'extérieur. C'est la même façon de comprendre ce que fait le code dans d'autres langues.
Le premier bit est alors :
( select(s), $|=1 )
Cette liste comporte deux éléments, qui sont les résultats de deux opérations : l'une pour sélectionner le s
par défaut, puis un pour définir $|
à une valeur vraie. Le site $|
est l'une des variables per-filehandle qui ne s'appliquent qu'au filehandle actuellement sélectionné (voir Comprendre les variables globales en Le Perleur efficace ). Au final, vous obtenez une liste de deux éléments : le précédent filehandle par défaut (le résultat de la commande select
), et 1.
La partie suivante est une tranche de liste littérale pour extraire l'élément à l'indice 0 :
( PREVIOUS_DEFAULT, 1 )[0]
Le résultat est l'élément unique qui est le précédent filehandle par défaut.
La partie suivante prend le résultat de la tranche et l'utilise comme argument pour un autre appel à select
select( PREVIOUS_DEFAULT );
Donc, en fait, vous avez mis $|
sur un fichier et vous vous êtes retrouvé au point de départ avec le fichier par défaut.