Programming, Français, Programmation

[Débutants] Entrée et sortie de données en Perl: STDOUT, STDERR et STDIN

Un programme informatique ne fonctionne pas dans le vide; d’une façon ou d’une autre, les données doivent pouvoir entrer et sortir.
Lorsqu’on programme un script en ligne de commande en Perl, on peut utiliser les entrées et sorties standards mises à notre disposition par le système d’exploitation.

Sorties standards

La sortie standard s’appelle tout simplement STDOUT. Quand on utilise print($unTruc), Perl recrache $unTruc dans la sortie standard du système hôte.

print STDOUT "foo\n";

est équivalent à:

print "foo\n";

Sur un système Unix, on pourra transférer les données affichée par notre programme vers un autre programme ou fichier, en utilisant des redirections shell:

perl stdout.pl > text.txt

On recrache le résultat de notre programme stdout.pl dans le fichier text.txt. Pour afficher les messages d’erreur, on peut utiliser STDERR de la même manière.

Entrées standards

On peut aussi utiliser STDIN, l’entrée standard du système:

print "Votre nom: ";
my $name = <STDIN>;

chomp $name;
print "Vous vous appelez '$name'\n";

L’opérateur <> qui entoure STDIN permet de lire l’entrée standard du système (généralement une commande utilisateur) ligne par ligne (voir la documentation des opérateur d’entrée-sortie). L’utilisation de chomp() à la fin permet d’éliminer le charactère “Entrée” que l’utilisateur devra utiliser pour valider sa commande.

Avertissement: attention aux données exposées

Attention: les entrées/sorties sont utiles aux programmeurs, mais soyons prudent lorsque nous les utilisons pour exposer le fonctionnement interne de notre code! Cela pourrait avoir des conséquences désastreuses si on expose des données sensibles.
Par exemple, voilà ce qui se passe si on laisse malencontreusement un programme enregistrer toutes les touches entrées par l’utilisateur dans un fichier non crypté (!!). Des hackers pourraient utiliser ce fichier pour trouver les mots de passe entrés par un utilisateur.

Standard
Programming, English

[Beginners] Ins and outs: STDOUT, STDERR et STDIN in Perl

A computer program doesn’t exist in a vacuum; one way or another, data needs to go in and out.

When writing a command line script in Perl, we can use the standard input and outputs from our operating system.

Standard outputs

The standard input is simply called STDOUT. When we use print($something), Perl spits out $something in the system’s standard outputs:

print STDOUT "foo\n";

is equivalent to:

print "foo\n";

On a Unix system, you can transfer data displayed by your program to another program or to a file, using shell redirections:

perl stdout.pl > text.txt

We spit out whatever stdout.pl outputs into  text.txt.
To display error messages, you can use STDERR the same way

Standards inputs

We can also use STDIN, out system’s standard input:

print "Your name: ";
my $name = <STDIN>;

chomp $name;
print "Your name is '$name'\n";

The <> operator around STDIN enables us to read the standard input (usually a user command) line by line (see Perl’s documentation for I/O Operators). Using chomp() at the end deletes the last character, the invisible “Enter” character that the user will use to validate the command.

Caution: don’t expose sensitive data

Standard I/O’s are really useful to developers, but we need to be careful when exposing the internals of our code through them, or consequences could be disastrous!

For instance, here’s what happens when someone inadvertently lets a program log all keystrokes in an unencrypted file(!!). Hackers could use that file to find out passwords entered by a user.

Standard