Table des matières:
- Collecte de lignes uniques
- Suppression de plusieurs lignes vides
- Imprimer des lignes à partir d'un fichier dans l'ordre du tri
- Imprimer une série de lignes à partir d'un fichier
- Liste seulement les fichiers dans un répertoire
- Liste d'un répertoire par taille
- Tri des répertoires par extension
- Créer une calculatrice simple
- En Perl, générer des nombres aléatoires est facile, mais randomiser l'ordre d'un tableau n'est pas aussi simple. Néanmoins, vous pouvez utiliser la fonction splice pour extraire un élément aléatoire d'un tableau, puis placer l'élément dans un autre tableau. Le programme suivant randomise la liste @MyList:
- Essayer de convaincre les utilisateurs d'ordinateurs de trouver des mots de passe difficiles à deviner est l'une des tâches les plus difficiles pour un administrateur système. Les gens semblent toujours insister sur l'utilisation de leur date de naissance ou des noms d'animaux de compagnie pour les mots de passe - briser la sécurité devient alors un jeu d'enfant.
Vidéo: You Bet Your Life: Secret Word - Floor / Door / Table 2024
Certaines personnes pensent que les programmes courts ne sont pas bons pour beaucoup, mais ce n'est pas le cas de Perl. Juste quelques lignes de code Perl peuvent aller un long chemin. Cet article répertorie des programmes Perl très pratiques.
Collecte de lignes uniques
Si votre fichier texte contient plusieurs lignes qui sont en double et que vous ne voulez voir que les lignes uniques, vous pouvez les collecter dans un tableau (dans ce cas, @Unique) avec le programme suivant:
ouvrir (IN, "quelquechose.txt"); @ Unique = ();
while () {sauf ($ i {$ _} ++) {push (@Unique, $ _)}}
L'astuce ici est que $ i {$ _} ++ retourne 0 la première fois vous créez une paire clé-valeur avec $ _ comme clé, et une valeur non nulle après cela.
Suppression de plusieurs lignes vides
Certains fichiers texte comportent plusieurs lignes vides consécutives, ce qui les rend difficiles à lire, en particulier sur les petits écrans. Le programme suivant imprime un fichier texte en compressant toutes les instances de deux ou plusieurs lignes vides dans une seule ligne vide.
Remarque: Une ligne vide peut comporter des caractères blancs, tels que des espaces et des tabulations, mais aucun caractère affichable.
ouvrir (IN, "un fichier.txt"); $ PrevBlank = 0;
while () {
if (/ S / ou! $ PrevBlank) {print $ _}
$ PrevBlank = / ^ s * $ /;
}
L'instruction if de l'exemple précédent est vraie s'il y a des caractères non vides sur la ligne ou si la ligne précédente n'était pas vide. L'affectation $ PrevBlank vous indique si la ligne en cours est vide, ce qui signifie qu'elle a zéro ou plusieurs caractères espaces et rien d'autre.
Imprimer des lignes à partir d'un fichier dans l'ordre du tri
Il est facile d'oublier l'utilité de la fonction de tri de Perl. Le programme suivant lit le fichier entier dans un tableau, trie le tableau et imprime le résultat. Court et doux, et assez efficace pour démarrer:
ouvrir (IN, "somefile.txt");
print sort ();
Imprimer une série de lignes à partir d'un fichier
Avez-vous déjà voulu lire seulement quelques lignes d'un fichier, et pas tout? Le programme suivant imprime uniquement une série de lignes. Vous exécutez le programme avec deux arguments: la plage que vous voulez et le nom de fichier. Par exemple, si vous nommez votre programme "showline" et que vous voulez voir les lignes 10 à 20 du fichier. fichier txt, vous utilisez cette ligne de commande:
showline 10-20 unfichier. txt
Le programme suivant imprime une série de lignes:
ouvrir (IN, $ ARGV [1]) ou mourir "Impossible de lire le fichier $. n ";
($ Start, $ Stop) = split (/ - /, $ ARGV [0]);
pour ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Ligne =; if ($ i> = $ Start) {print $ Line}}
Liste seulement les fichiers dans un répertoire
Parfois, vous pouvez ignorer les sous-répertoires dans un répertoire et vous concentrer sur les fichiers.Vous pouvez utiliser le test de fichier -f suivant pour lister tous les fichiers d'un répertoire:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Liste d'un répertoire par taille
Pour trier une liste de répertoires par autre chose que ses noms de fichiers, votre programme doit conserver une liste d'enregistrements comprenant les noms et autres éléments de la liste. Les hachages sont excellents à utiliser pour ce genre de liste qui a des enregistrements avec une clé (le nom de fichier) et une valeur (les autres informations de répertoire). Le programme suivant crée un hachage qui répertorie la taille de chaque fichier dans le répertoire, puis trie les éléments pour la sortie. (Vous pouvez facilement modifier ce programme pour trier par date plutôt que par taille.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (trier {$ i {$ b} <= & gt $ i {$ a}} clés% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Tri des répertoires par extension
Le tri par une partie d'un nom de fichier est un processus légèrement plus difficile que le tri par taille de fichier ou par la date à laquelle le fichier a été modifié. Le programme suivant divise le nom de fichier en deux et trie par la seconde partie. Si vous exécutez Perl sur un système UNIX ou Macintosh, ce programme fonctionne de manière prévisible uniquement si les noms de fichiers n'ont pas de période ou de période:
foreach $ FullName () {
($ Name, $ Ext) = split (/. /, $ FullName, 2);
push (@Temp, "$ Extt $ FullName");
}
foreach $ Val (sort (@Temp)) {
($ Ext, $ FullName) = split (/ t /, $ Val);
imprimez "$ FullNamen";
}
Créer une calculatrice simple
Avez-vous déjà eu besoin d'une calculatrice facile à utiliser pour vous débarrasser d'un calcul rapide? Le programme suivant utilise la fonction eval de Perl pour imprimer les réponses à toute équation que vous entrez. Pour terminer le programme, entrez une ligne vide. Voici ce programme pour créer votre propre calculatrice:
while () {
$ i = $ _; chomp ($ i); sauf si ($ i) {last}
$ o = eval ($ i); print "Réponse = $ sur";
}
Lorsque vous exécutez le programme, vous pouvez entrer quelque chose comme:
((2 ** 8) + (3 ** 8))
et vous obtenez ce résultat: > Réponse = 6817
Randomiser une liste
En Perl, générer des nombres aléatoires est facile, mais randomiser l'ordre d'un tableau n'est pas aussi simple. Néanmoins, vous pouvez utiliser la fonction splice pour extraire un élément aléatoire d'un tableau, puis placer l'élément dans un autre tableau. Le programme suivant randomise la liste @MyList:
my @TempList = ();
while (@MyList)
{push (@TempList, splice (@MyList, rand (@MyList), 1))}
@MonList = @TempList;
L'astuce ici est que rand (@MyList) sélectionne un nombre entre 0 et le nombre d'éléments dans @MyList, et splice change ce nombre aléatoire en entier.
Générer des mots de passe mnémoniques aléatoires
Essayer de convaincre les utilisateurs d'ordinateurs de trouver des mots de passe difficiles à deviner est l'une des tâches les plus difficiles pour un administrateur système. Les gens semblent toujours insister sur l'utilisation de leur date de naissance ou des noms d'animaux de compagnie pour les mots de passe - briser la sécurité devient alors un jeu d'enfant.
Le programme suivant génère des mots de passe aléatoires. Au lieu d'un fouillis de lettres difficiles à retenir, cependant, les mots de passe sont quelque peu mnémoniques parce qu'ils apparaissent dans des paires de consonnes et de voyelles qui sont prononçables.En enchaînant quelques syllabes goofy-sounding, vous pouvez générer des phrases non-sens faciles à mémoriser.
Chaque syllabe du mot de passe peut représenter n'importe lequel des 100 nombres; par conséquent, un seul mot de passe de quatre syllabes, tel que
votahubo, , est l'un des 100 millions de mots de passe possibles (100 à la puissance 4) que le programme génère. Le fait qu'un administrateur système attribue ces mots de passe offre plus de sécurité que de laisser les utilisateurs choisir leurs propres mots de passe, faciles à deviner: print "Entrez un numéro de départ:"; $ s =;
srand ($ s ^ heure);
@ c = split (/ * /, "bcdfghjklmnprstvwxyz");
@ v = split (/ * /, "aeiou");
pour ($ i = 1; $ i <= 4; $ i + = 1)
{print $ c [int (rand (20))], $ v [int (rand (5))] }
Les deux premières lignes de ce programme initialisent la graine pour les nombres aléatoires, et les deux suivantes créent des listes contenant les 20 consonnes (moins
q ) et 5 voyelles de l'alphabet. La boucle for imprime simplement les quatre syllabes.