BINMODE |
Mode binaire |
|---|---|
Perl |
Syntaxe
| binmode handle |
| binmode handle,layer |
Paramètres
| Nom | Description | |
|---|---|---|
| handle | Ce paramètre permet d'indiquer l'identificateur de descripteur de fichier. | |
| layer | Ce paramètre optionnel permet d'indiquer le mode d'accès du fichier : | |
| Valeur | Description | |
| :raw | Cette valeur permet d'indiquer un mode d'accès en binaire. | |
| :crlf | Cette valeur permet d'indiquer un mode d'accès texte. | |
Retour
| Valeur | Description |
|---|---|
| vrai | Cette valeur permet d'indiquer que l'opération s'est correctement passé. |
| undef | Cette valeur permet d'indiquer qu'une erreur est survenu. Dans ce cas, la variable $! contient le code d'erreur. |
Description
Cette fonction fixe le mode de traitement de fichier en mode d'entrée/sortie binaire.
Remarques
- Essentielle pour la portabilité entre systèmes : La fonction binmode est particulièrement utile sur les systèmes Windows, où les fichiers texte peuvent modifier automatiquement les fins de ligne (\n devient \r\n). L'utilisation de binmode avec :raw permet d'éviter toute transformation implicite, assurant ainsi une lecture/écriture strictement binaire, comme sur Unix.
- Indispensable pour manipuler des fichiers binaires : Lorsqu'on traite des fichiers images, vidéos, archives ou tout contenu non texte, il est impératif d'utiliser binmode. Sans cela, certains octets peuvent être modifiés automatiquement par Perl ou le système d'exploitation, entraînant des fichiers corrompus ou inutilisables.
- Application sur les fichiers ouverts uniquement : binmode ne fonctionne que sur des fichiers déjà ouverts, et s'applique à un descripteur de fichier (par exemple STDIN, STDOUT, ou un descripteur ouvert via open). Si le descripteur est mal initialisé, la fonction retourne undef et la variable spéciale $! contiendra le message d'erreur du système.
- Contrôle précis avec les couches d'entrées/sorties : Le deuxième paramètre (layer) de binmode permet d'appliquer une couche de traitement spécifique, comme :raw pour du binaire ou :crlf pour du texte. Cela permet de configurer précisément le comportement de lecture/écriture, notamment dans les scripts devant jongler entre plusieurs formats.
- Utilisation fréquente avec STDOUT en contexte CGI : Dans un script CGI retournant des contenus binaires (exemple : image PNG, PDF) à un navigateur, il est courant d'appliquer binmode STDOUT pour éviter toute altération des données envoyées. Cela garantit que les octets envoyés au client correspondent exactement aux octets générés.
- Aucun effet sur les chaînes en mémoire : Il est important de noter que binmode agit uniquement sur les fichiers ou flux, et n'a aucun effet sur les chaînes en mémoire. Pour manipuler des données binaires entreposées dans des variables Perl, il faut utiliser d'autres fonctions ou opérateurs (pack, unpack,...).
- Peut améliorer la performance des entrées/sorties : L'utilisation de binmode :raw désactive les transformations implicites et peut réduire la surcharge liée à la gestion des encodages ou des fins de ligne. Cela peut légèrement améliorer les performances lors de la manipulation de gros fichiers binaires en lecture ou écriture.
- Indépendant du mode d'ouverture initial : Même si un fichier est ouvert en lecture ou en écriture avec open, le mode texte ou binaire n'est pas déterminé uniquement par open. Il faut explicitement appliquer binmode après l'ouverture du fichier si l'on souhaite garantir un traitement binaire (ou au contraire texte), ce qui évite des erreurs subtiles dans les traitements multi-plateformes.
Exemple
Voici un exemple permet d'écrire trois octets dans le fichier «data.bin» :
Références
La Bible Micro Application HTML & Développement Web, Stefan Munz, Wolfgang Nefzger, 2003, ISBN: 2-7429-2898-7, page 1147
Dernière mise à jour : Dimanche, le 18 octobre 2015