Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

perl -e

14 réponses
Avatar
serge.john.swilting
connaissez vous des exemples de one liner
je commence à les utiliser de plus en plus
et je manque d inspiration


par avance merci

4 réponses

1 2
Avatar
serge.john.swilting
serge.john.swilting wrote:

j ai deja vu que les one liners etait tres rapide
mais quand pensez vous
bonne literrature ultra peu portable
ou idez completement farfelus

$i=`perl -e 'open FICH,"<fichier"; my $i=0; foreach (<FICH>) { $i++; }`

je sais que ça marche quand pensez vous


serge.john.swilting wrote:


je sais meme pas si c portable entre les versions de perl
moi 5.8 avec threads pour le fun


je veux m en servir pour faire un parser des fichiers de sortie de nmap
et puis apres faire des trools trools trools trools

parce que le jour ou je sors une version 0.0.1a
c ici que je ferais mais premiere classe
pour enlever la peur

je vous remercie tous tres chalereusement
bisous de pau

serge

j enleve les aka
parce que certains en connaissent surement



trools
<xml>
haiku
<xml>

le tarball Nmap::Scanner 0.5 est completement instable

Thibault wrote:


plus precis j ecrit des perl -en avec des ` `
je crois que c pas mal rapide
ultra peu portable

et je trouve que dans du texte ça fait une bonne litterature



serge.john.swilting wrote:
connaissez vous des exemples de one liner
je commence à les utiliser de plus en plus
et je manque d inspiration




j essaye d utiliser des perl -e à l interieur de mes scripts
mais je manque de docs
meme de la docs vraiment farfelues ça peut surrement m aider



Je ne vois pas vraiment l'interet de mettre des perl -e à l'interieur
des scripts perl ... étant donné que perl -e est justement une option de
ligne de commande pour ne pas avoir a créer un fichier.




voila j aimerais ecrire une perl -e
qui puisse compter le nombre de ligne d un fichier
et avec split avec les separateur d enregistrement normal
creer un tableau de toute les lignes du fichier
a
avec @tab[0]= premiere ligne du fichier


$ perl -e 'open FICH,"<fichier"; my $i=0; foreach (<FICH>) { $i++; }
print $i;'

Sinon, et bien plus drole:
$ perl -e 'print `wc -l fichier`;'


A+

Thibault









Avatar
serge.john.swilting
Ronan Le Hy wrote:


Euh...? parce que c'est le principe du "one liner", d'utiliser perl en
ligne de commande?

$ perl -e 'open FICH,"<fichier"; my $i=0; foreach (<FICH>) { $i++; }
print $i;'

Sinon, et bien plus drole:
$ perl -e 'print `wc -l fichier`;'




Ca a sûrement été golfé auparavant (y compris ici), mais...

celui la je le comprends vraiment pas

perl -lp0e '$_=y/n//'


Avatar
Jedaï
serge.john.swilting wrote:
Laurent Wacrenier wrote:


Thibault écrit:

$ perl -e 'open FICH,"<fichier"; my $i=0; foreach (<FICH>) { $i++; }
print $i;'

Sinon, et bien plus drole:
$ perl -e 'print `wc -l fichier`;'



perl -nle 'END { print $. }' fichier
perl -le 'print scalar (@foo = <>)' fichier



j essaye presque de pouvoir faire un parser
en utilisant le moins possible les expressions regulieres

avec une utilisation massive de
push pop susbtr


Quel est le rapport ? Pourquoi postes-tu toujours 3 messages
successivement, tu ne pourrais pas tout mettre dans un seul ?
(Pourquoi est-ce que je suis en train d'écrire ce message...)

--
Jedaï



Avatar
Jedaï
serge.john.swilting wrote:

serge.john.swilting wrote:

j ai deja vu que les one liners etait tres rapide
mais quand pensez vous
bonne literrature ultra peu portable
ou idez completement farfelus

$i=`perl -e 'open FICH,"<fichier"; my $i=0; foreach (<FICH>) { $i++; }`;
print $i;

je sais que ça marche quand pensez vous



Euh... C'est dans un script shell (à ce moment là, je peux comprendre
même si dans ce cas, il vaut sans doute mieux utiliser wc) ou dans un
script Perl ?
Si c'est dans un script Perl, le seul risque que tu cours c'est de
ralentir ton script par rapport à si tu n'utilisais pas de one liner, tu
augmentes aussi les risques de bug, ce script ne marchera pas (tu
n'imprime pas le $i de ton one liner à la fin, donc le $i du script
principal aura pour valeur "" (à moins que les ` ne se comportent comme
des " et que $i soit remplacé par rien dans ton one liner.....)).
Donc abandonne tout de suite l'idée, le seul intérêt qu'on pourrait y
trouver, si on était particulièrement paresseux, c'est quand on utilise
un bon nombre des options de la ligne de commande (ce qui n'est pas ton
cas), comme dans : perl -lp0e '$_=y/n//'

J'explique :
C'est équivalent à :

#!perl
$ = $/; # -l
$/=""; # -0
while( <> ) { # -p
chomp; # -l
$_ = y/n//;
} continue { # -p
print or die "-p destination: $!n"; # -p
}
__END__

Donc, ce one liner avale tout le fichier en une fois, puis compte le
nombre de fin de ligne, qui est donc le nombre de ligne, qu'il imprime,
le -l semble être ici à but purement esthétique pour rajouter une fin de
ligne après le $_ imprimé.
Il est inadapté aux très gros fichiers, pour lesquels il vaut mieux
utiliser :
perl -ne 'END{ print $. }'
(Je crois que quelqu'un l'a déjà rappelé)
Mais le mieux est encore : wc -l :)
Les one liner sont faits pour être utilisés en ligne de commande, pas
dans des scripts Perl !!
(Ton one liner, même en supposant qu'il marche (autrement dit que tu
rajoute un print $i à la fin, et que tu l'utilise en ligne de commande)
est assez inefficient puisqu'il charge toutes les lignes du fichier en
mémoire dans un tableau (cf <FICHIER> en contexte de liste dans le
foreach), mais en plus il boucle inutilement dessus alors qu'il suffit
de compter le nombre d'éléments dans le tableau, comme quelqu'un l'a
fait dans une autre proposition).

1 2