La manière de comprendre n'importe quel code est de le démonter. Vous savez que les choses entre parenthèses arrivent avant les choses à l'extérieur. C'est de la même manière que vous pourriez déterminer 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 alors que la valeur par défaut du s
filehandle un pour définir $|
à une vraie valeur. Le $|
est l'une des variables par filehandle qui s'appliquent uniquement au handle de fichier actuellement sélectionné (voir Understand global variables à The Effective Perler). En fin de compte, vous avez une liste de deux éléments: le descripteur de fichier par défaut précédent (le résultat de select
) et 1.
La partie suivante est une tranche de liste littérale pour retirer l'élément dans l'index 0:
(PREVIOUS_DEFAULT, 1)[0]
Le résultat est l'élément unique qui est le handle de fichier par défaut précédent.
La partie suivante prend le résultat de la tranche et l'utilise comme argument à un autre appel à select
select(PREVIOUS_DEFAULT);
Donc, en effet, vous avez mis $|
sur un descripteur de fichier et a fini par là où vous commencé avec le handle de fichier par défaut.
Pour confondre et frustrer les personnes qui doivent gérer le code, c'est-à-dire vous. –