Script perl aide

Fermé
ochiheb Messages postés 7 Date d'inscription dimanche 15 décembre 2013 Statut Membre Dernière intervention 28 octobre 2014 - Modifié par krazykat le 17/12/2013 à 10:19
ochiheb Messages postés 7 Date d'inscription dimanche 15 décembre 2013 Statut Membre Dernière intervention 28 octobre 2014 - 15 déc. 2013 à 19:28
Bonjour,
je suis débutant en script perl, merci de me donner une explication concernant le fonctionnement du script ci-dessous :
----------------------------------------------------------------------------------
#!/usr/bin/perl
my ($file, $from, $to) = @ARGV?
my $fh?
my $matching = 0?
open($fh, $file) or die $!?
while(<$fh>)
{
if(/\Q$from\E/) { $matching = 1? }
if($matching) { print $_? }
if($matching && /\Q$to\E/) { last? }
}
close($fh)?
-------------------------------------------------------------------------------------
merci d'avance pour votre aide, :)
A voir également:

2 réponses

Utilisateur anonyme
15 déc. 2013 à 13:15
Salut,

ça ressemble à une recherche dans un fichier, en fonction des arguments donnés au script.
0
ochiheb Messages postés 7 Date d'inscription dimanche 15 décembre 2013 Statut Membre Dernière intervention 28 octobre 2014
15 déc. 2013 à 13:28
merci pour votre réponse, en effet j'aimerai plus de détails si c'est possible chaque ligne avec un petit commentaire :)
0
Pour être honnête, c'est la première fois que je vois un script Perl.
Je suis plutôt habitué du Python, Batch, Sh et VB (En ce qui concerne les scripts) sinon C/C++.
Mais je veux bien essayer pour t'aider.

On considère que le fichier du script est script.pl
#!/usr/bin/perl
# Déclarations des variables
my ($file, $from, $to) = @ARGV? # Les arguments du programme s'enregistre dans cet array
# Exemple théorique, si en lance le script avec la commande :
# script.pl .\lolilol.txt arg2 arg3
# Il enregistrera :
# $file = ".\lolilol.txt"
# $from = "arg2"
# $to = "arg3"
my $fh? # Peut être file handle. En tous cas, vu qu'il y a while(<$fh>), je me dit que ce doit être la ligne courante du fichier $file qu'on lit
my $matching = 0? # Booléen qui permet de savoir si on a une équivalence, et donc de continuer d'autres opérations en condition (Sinon il servirait à rien, autant break)
open($fh, $file) or die $!? # On ouvre le fichier $file dans son handle (Ou devrais-je dire Stream) qui est nommé $fh. Si on peut pas lire, on ferme l'application.
while(<$fh>) # Tant qu'on parvient à lire un morceau du fichier (Une ligne)
{
if(/\Q$from\E/) { $matching = 1? } # ça ressemble à un regex, mais je ne comprends toujours pas ce qu'est l'argument $from exactement. En tous cas, ici on cherche une équivalence.
if($matching) { print $_? } # Afficher la ligne, peut être ...
if($matching && /\Q$to\E/) { last? } # C'est quoi last?
}
close($fh)? # Traitement terminé, on ferme $file à travers son handle $fh
0
Si tu veux plus d'informations sur certaines fonctions, rien ne t'empêche de consulter la documentation (A part si tu ne connais pas l'anglais ... quoique, Google peut aider mais c'est toujours mieux de savoir lire l'anglais dans ce domaine)

https://perldoc.perl.org/

Dans le champ de recherches, tu entres le nom de la fonction (Exemple moi je veux savoir pour last).
https://perldoc.perl.org/functions/last

The last command is like the break statement in C (as used in loops); it immediately exits the loop in question.

En gros, avec ça on quitte la boucle(while).
Donc on quitte la boucle while lorsqu'on a trouvé une équivalence et qu'on a quelque chose avec $to en fait je vois pas ce que c'est non plus /\Q et \E/ ... lis la doc pour moi, s'il te plait ;)
0
ochiheb Messages postés 7 Date d'inscription dimanche 15 décembre 2013 Statut Membre Dernière intervention 28 octobre 2014
Modifié par ochiheb le 15/12/2013 à 19:28
merci beaucoup pour votre aide, vraiment c'est très gentil de ta part. :)
0