Afficher le contenu d'un fichier sur la sortie standard.

Introduction

J'écris cet article, car j'ai récemment vu dans un script Perl l'utilisation de la fonction system avec cat pour afficher le contenu d'un fichier à l'écran. Ce que je n'ai pas trouvé très propre et élégant. J'expliquerai pourquoi, il faut éviter au maximum l'utilisation de la fonction system dans un prochain article. Les principales raisons pour lesquelles, il faut éviter la fonction system, sont le fork vers un shell ce qui consomme de la mémoire et gaspille du cpu, et pour des raisons de sécurité.

Afficher le contenu d'un fichier en Perl

La première question qu'il faut se poser et que fait la commande cat. Dans sa forme la plus simple sans option, la réponse et qu'elle permet d'afficher le contenu de chacun des fichiers spécifiés. Ce n'est donc pas très compliqué à implémenter en Perl. Dans l'exemple que j'ai vu, elle était utilisée pour afficher le contenu d'un fichier uniquement, ce qui est encore plus simple. On souhaite donc ouvrir un fichier en lecture seule, et afficher toutes les lignes de ce fichier.

system('cat mon_fichier');

Cette instruction peut donc être remplacé par quelque chose comme l'exemple ci-dessous.

open(FILE, "<FILE") || die ("Impossible d'ouvrir le fichier");

while (<FILE>) {
    print;
}

close(FILE);

Ce code nous permet donc d'avoir le même résultat qu'avec l'appel à la commande cat.

Implémentation d'un cat minimaliste

Il n'est pas très compliqué non plus d'écrire un cat minimaliste qui permettra d'afficher le contenu de plusieurs fichiers. Il faut ajouter une boucle sur le chemin de chacun des fichiers indiqués.

my @files = ('mon_fichier', 'autre_fichier', 'encore_un_fichier');
foreach my $file (@files) {
    open(FILE, "<$file");

    while (<FILE>) {
        print;
    }

    close(FILE);
}

Conclusion

Afficher le contenu d'un fichier sur la sortie standard n'est pas bien difficile, n'oublions pas que Perl est parfaitement adapté aux traitements et à la manipulation de fichiers, et cela évite un appel à la fonction system, ce qui est mieux en terme de sécurité, et évite de faire un fork vers un shell, sans oublier que la configuration d'un shell peut-être différente chez chacun, mais je reviendrai plus tard sur ce propos. Lorsqu'on programme, il faut toujours se demander ce qu'on souhaite faire. Ensuite, il faut découper le problème en petite partie. Il ne faut pas hésiter à réfléchir à l'aide d'un papier et d'un stylo pour bien poser ses idées, bien-sûr pour des choses simple comme ceci, le cahier n'est pas indispensable, en revanche la réfléxion l'est toujours.

Vus : 826
Publié par Hobbestigrou : 195