Je comprend pas pourquoi quand je passe *.hex en argument, il
n'=E9xecute que le script pour le le premier fichier rencontrer et non
tous ?
#!/usr/bin/perl -w
$a =3D $ARGV[0];
open (IN, "< $a" );
open (OUT, ">out.tmp" );
$cpt=3D0;
while ($line =3D <IN> ) {
if ($line =3D~ /8001/)
{
$cpt++;
print OUT $line;
close OUT;
open (OUT, ">out.tmp");
}
else
{
$b =3D "$cpt$a";
print OUT $line;
rename "out.tmp", $b;
}
}
close OUT;
J'ai essaye en l'appellent par un bash-script la j'ai l'erreur mais sa
va pas il fait un fichier puis pour l'autre il ne le termine pas
il affiche =E7a :
print() on closed filehandle OUT at ./v2cut-1.pl line 17, <IN> line
le script :
#!/bin/bash
function f_pdf2text {
v2cut-1.pl "$0"
}
{
find . -type f -name "*.hex" -maxdepth 1
echo "EOF"
} | {
while true; do
read -r i
f_pdf2text "$i"
test "$i" =3D "EOF" && break
done
}
Je comprend pas pourquoi quand je passe *.hex en argument, il n'éxecute que le script pour le le premier fichier rencontrer et non tous ?
#!/usr/bin/perl -w $a = $ARGV[0]; [...]
D'abord parce que ton shell fait l'expansion (à moins que tu aies quoté ou escapé le *), donc ton script reçoit tous les noms de fichier en arguments, mais n'utilise que le premier.
Ensuite parce que même si ton script recevait "*.hex" et pas le nom du premier fichier, je ne vois pas ce qui dans ton script le pousserait à traiter tous les fichiers portant ce nom un par un, il n'y a aucune boucle sur le fichier...
Jacques.
Salut,
On 25 Jun 2005 09:48:02 -0700, <ptilou@gmail.com> wrote:
Je comprend pas pourquoi quand je passe *.hex en argument, il
n'éxecute que le script pour le le premier fichier rencontrer et non
tous ?
#!/usr/bin/perl -w
$a = $ARGV[0];
[...]
D'abord parce que ton shell fait l'expansion (à moins que tu aies quoté ou
escapé le *), donc ton script reçoit tous les noms de fichier en
arguments, mais n'utilise que le premier.
Ensuite parce que même si ton script recevait "*.hex" et pas le nom du
premier fichier, je ne vois pas ce qui dans ton script le pousserait à
traiter tous les fichiers portant ce nom un par un, il n'y a aucune boucle
sur le fichier...
Je comprend pas pourquoi quand je passe *.hex en argument, il n'éxecute que le script pour le le premier fichier rencontrer et non tous ?
#!/usr/bin/perl -w $a = $ARGV[0]; [...]
D'abord parce que ton shell fait l'expansion (à moins que tu aies quoté ou escapé le *), donc ton script reçoit tous les noms de fichier en arguments, mais n'utilise que le premier.
Ensuite parce que même si ton script recevait "*.hex" et pas le nom du premier fichier, je ne vois pas ce qui dans ton script le pousserait à traiter tous les fichiers portant ce nom un par un, il n'y a aucune boucle sur le fichier...
Jacques.
ptilou
Bonjour,
Jacques Caron wrote:
Salut,
On 25 Jun 2005 09:48:02 -0700, wrote:
Je comprend pas pourquoi quand je passe *.hex en argument, il n'éxecute que le script pour le le premier fichier rencontrer et non tous ?
#!/usr/bin/perl -w $a = $ARGV[0]; [...]
D'abord parce que ton shell fait l'expansion (à moins que tu aies quot é ou escapé le *), donc ton script reçoit tous les noms de fichier en arguments, mais n'utilise que le premier.
Je dois remplacer $ARGV[0] par @ARGV et metre une boucle ?
Ensuite parce que même si ton script recevait "*.hex" et pas le nom du premier fichier, je ne vois pas ce qui dans ton script le pousserait à traiter tous les fichiers portant ce nom un par un, il n'y a aucune boucle sur le fichier...
Oui, mais pourquoi, marche pas avec le bash ?
Merçi
Ptilou
Bonjour,
Jacques Caron wrote:
Salut,
On 25 Jun 2005 09:48:02 -0700, <ptilou@gmail.com> wrote:
Je comprend pas pourquoi quand je passe *.hex en argument, il
n'éxecute que le script pour le le premier fichier rencontrer et non
tous ?
#!/usr/bin/perl -w
$a = $ARGV[0];
[...]
D'abord parce que ton shell fait l'expansion (à moins que tu aies quot é ou
escapé le *), donc ton script reçoit tous les noms de fichier en
arguments, mais n'utilise que le premier.
Je dois remplacer $ARGV[0] par @ARGV et metre une boucle ?
Ensuite parce que même si ton script recevait "*.hex" et pas le nom du
premier fichier, je ne vois pas ce qui dans ton script le pousserait à
traiter tous les fichiers portant ce nom un par un, il n'y a aucune boucle
sur le fichier...
Je comprend pas pourquoi quand je passe *.hex en argument, il n'éxecute que le script pour le le premier fichier rencontrer et non tous ?
#!/usr/bin/perl -w $a = $ARGV[0]; [...]
D'abord parce que ton shell fait l'expansion (à moins que tu aies quot é ou escapé le *), donc ton script reçoit tous les noms de fichier en arguments, mais n'utilise que le premier.
Je dois remplacer $ARGV[0] par @ARGV et metre une boucle ?
Ensuite parce que même si ton script recevait "*.hex" et pas le nom du premier fichier, je ne vois pas ce qui dans ton script le pousserait à traiter tous les fichiers portant ce nom un par un, il n'y a aucune boucle sur le fichier...
Oui, mais pourquoi, marche pas avec le bash ?
Merçi
Ptilou
Jacques Caron
On 25 Jun 2005 22:41:16 -0700, wrote:
Je dois remplacer $ARGV[0] par @ARGV et metre une boucle ?
Oui, par exemple for my $a (@ARGV) { et ne pas oublier de refermer le } à la fin.
Oui, mais pourquoi, marche pas avec le bash ?
Je ne sais pas, il faudrait que tu rajoutes des tests sur tes open genre open ">out.tmp" or die "erreur ouverture out.tmp: $!", ça t'en dira plus.
Au passage, dans ton script bash, il y a plus simple que ton pipe compliqué, tu peux faire un find . -name *.hex -exec script {} ;
Le {} sera remplacé par le nom du fichier à chaque invocation.
Jacques.
On 25 Jun 2005 22:41:16 -0700, <ptilou@gmail.com> wrote:
Je dois remplacer $ARGV[0] par @ARGV et metre une boucle ?
Oui, par exemple for my $a (@ARGV) { et ne pas oublier de refermer le } à
la fin.
Oui, mais pourquoi, marche pas avec le bash ?
Je ne sais pas, il faudrait que tu rajoutes des tests sur tes open genre
open ">out.tmp" or die "erreur ouverture out.tmp: $!", ça t'en dira plus.
Au passage, dans ton script bash, il y a plus simple que ton pipe
compliqué, tu peux faire un find . -name *.hex -exec script {} ;
Le {} sera remplacé par le nom du fichier à chaque invocation.
Non, mais je crois que le script bash est bien et c'est le perl qui pose probléme !
Suis je obligé de passer par un opendir ? (Et abandonner mon script bash )
J'ai essayé, sans succer d'ajouté :
open dir (DIR, $_ )|| die "le path ?"; #Marce pas ! @ARGV = $_; foreach (@ARGV){ &cut-couleur };
sub cut-couleur { $a=$ARGV[0]; open (IN, "< $a" )|| die "(pas bien !)"; open (OUT, ">out.tmp" ) || die "pas ouvert"; $cpt=1; while ($line = <IN> ) { if ($line =~ /8001/o) { $cpt++; print OUT $line; close OUT; open (OUT, ">out.tmp"); } else { $b = "$cpt$a"; print OUT $line; rename "out.tmp", $b; } } close OUT; close IN;}
Merci
Ptilou
Bonjour,
Oui, mais pourquoi, marche pas avec le bash ?
ca marche tres bien, ca fait ce que ca devrait.
Non, mais je crois que le script bash est bien et c'est le perl qui
pose probléme !
Suis je obligé de passer par un opendir ? (Et abandonner mon script
bash )
J'ai essayé, sans succer d'ajouté :
open dir (DIR, $_ )|| die "le path ?";
#Marce pas !
@ARGV = $_;
foreach (@ARGV){
&cut-couleur };
sub cut-couleur {
$a=$ARGV[0];
open (IN, "< $a" )|| die "(pas bien !)";
open (OUT, ">out.tmp" ) || die "pas ouvert";
$cpt=1;
while ($line = <IN> ) {
if ($line =~ /8001/o)
{
$cpt++;
print OUT $line;
close OUT;
open (OUT, ">out.tmp");
}
else
{
$b = "$cpt$a";
print OUT $line;
rename "out.tmp", $b;
}
}
close OUT;
close IN;}
Non, mais je crois que le script bash est bien et c'est le perl qui pose probléme !
Suis je obligé de passer par un opendir ? (Et abandonner mon script bash )
J'ai essayé, sans succer d'ajouté :
open dir (DIR, $_ )|| die "le path ?"; #Marce pas ! @ARGV = $_; foreach (@ARGV){ &cut-couleur };
sub cut-couleur { $a=$ARGV[0]; open (IN, "< $a" )|| die "(pas bien !)"; open (OUT, ">out.tmp" ) || die "pas ouvert"; $cpt=1; while ($line = <IN> ) { if ($line =~ /8001/o) { $cpt++; print OUT $line; close OUT; open (OUT, ">out.tmp"); } else { $b = "$cpt$a"; print OUT $line; rename "out.tmp", $b; } } close OUT; close IN;}
Merci
Ptilou
Paul Gaborit
À (at) 27 Jun 2005 00:44:05 -0700, écrivait (wrote): [...]
Suis je obligé de passer par un opendir ? (Et abandonner mon script ~~~~~~~
[...]
open dir (DIR, $_ )|| die "le path ?"; ~~~~~~~~
#Marce pas !
Normal !
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 27 Jun 2005 00:44:05 -0700,
ptilou@gmail.com écrivait (wrote):
[...]
Suis je obligé de passer par un opendir ? (Et abandonner mon script
~~~~~~~
[...]
open dir (DIR, $_ )|| die "le path ?";
~~~~~~~~
#Marce pas !
Normal !
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 27 Jun 2005 00:44:05 -0700, écrivait (wrote): [...]
Suis je obligé de passer par un opendir ? (Et abandonner mon script ~~~~~~~
[...]
open dir (DIR, $_ )|| die "le path ?"; ~~~~~~~~
#Marce pas !
Normal !
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
ptilou
Bonjour,
Paul Gaborit wrote:
À (at) 27 Jun 2005 00:44:05 -0700, écrivait (wrote): [...]
Suis je obligé de passer par un opendir ? (Et abandonner mon script ~~~~~~~
Je comprend pas !
[...]
open dir (DIR, $_ )|| die "le path ?"; ~~~~~~~~
#Marce pas !
Normal !
oui, mais pourquoi ? (Je voudrais comprendre pourquoi une commande
Unix marche avec le bash et pas un script shell ?) PERL = Torture des neuronnes !
J'ai ça comme erreur: Unquoted string "cutcoul" may clash with future reserved word at ./v4cut-1.pl line 3. Operator or semicolon missing before &cutcoul at ./v4cut-1.pl line 3. Ambiguous use of & resolved as operator & at ./v4cut-1.pl line 3. syntax error at ./v4cut-1.pl line 3, near ") &" Illegal declaration of subroutine main::cut at ./v4cut-1.pl line 5. Unquoted string "cutcoul" may clash with future reserved word at ./v4cut-1.pl line 3. ( Il faut enregistre dans un autre fichier la partie sub cutcoul ou la déplacer parceque ce n'est pas le bon path ?
J'ai réessayé ça :
$arg = shift @ARGV|| die " argument non valide $!"; foreach (@ARGV) &cutcoul; $a = %ARGV sub cut-coul { open (IN, "< $a" )|| die "(pas bien $!)"; open (OUT, ">out.tmp" ) || die "pas ouvert $! "; $cpt=1; while ($line = <IN> ) { if ($line =~ /8001/o) { $cpt++; print OUT $line; close OUT; open (OUT, ">out.tmp"); } else { $b = "$cpt$a"; print OUT $line; rename "out.tmp", $b; } } close OUT; };
Merçi
Ptilou
Bonjour,
Paul Gaborit wrote:
À (at) 27 Jun 2005 00:44:05 -0700,
ptilou@gmail.com écrivait (wrote):
[...]
Suis je obligé de passer par un opendir ? (Et abandonner mon script
~~~~~~~
Je comprend pas !
[...]
open dir (DIR, $_ )|| die "le path ?";
~~~~~~~~
#Marce pas !
Normal !
oui, mais pourquoi ? (Je voudrais comprendre pourquoi une commande
Unix marche avec le bash et pas un script shell ?)
PERL = Torture des neuronnes !
J'ai ça comme erreur:
Unquoted string "cutcoul" may clash with future reserved word at
./v4cut-1.pl line 3.
Operator or semicolon missing before &cutcoul at ./v4cut-1.pl line 3.
Ambiguous use of & resolved as operator & at ./v4cut-1.pl line 3.
syntax error at ./v4cut-1.pl line 3, near ") &"
Illegal declaration of subroutine main::cut at ./v4cut-1.pl line 5.
Unquoted string "cutcoul" may clash with future reserved word at
./v4cut-1.pl line 3.
( Il faut enregistre dans un autre fichier la partie sub cutcoul ou la
déplacer parceque ce n'est pas le bon path ?
J'ai réessayé ça :
$arg = shift @ARGV|| die " argument non valide $!";
foreach (@ARGV) &cutcoul;
$a = %ARGV
sub cut-coul {
open (IN, "< $a" )|| die "(pas bien $!)";
open (OUT, ">out.tmp" ) || die "pas ouvert $! ";
$cpt=1;
while ($line = <IN> ) {
if ($line =~ /8001/o)
{
$cpt++;
print OUT $line;
close OUT;
open (OUT, ">out.tmp");
}
else
{
$b = "$cpt$a";
print OUT $line;
rename "out.tmp", $b;
}
}
close OUT;
};
À (at) 27 Jun 2005 00:44:05 -0700, écrivait (wrote): [...]
Suis je obligé de passer par un opendir ? (Et abandonner mon script ~~~~~~~
Je comprend pas !
[...]
open dir (DIR, $_ )|| die "le path ?"; ~~~~~~~~
#Marce pas !
Normal !
oui, mais pourquoi ? (Je voudrais comprendre pourquoi une commande
Unix marche avec le bash et pas un script shell ?) PERL = Torture des neuronnes !
J'ai ça comme erreur: Unquoted string "cutcoul" may clash with future reserved word at ./v4cut-1.pl line 3. Operator or semicolon missing before &cutcoul at ./v4cut-1.pl line 3. Ambiguous use of & resolved as operator & at ./v4cut-1.pl line 3. syntax error at ./v4cut-1.pl line 3, near ") &" Illegal declaration of subroutine main::cut at ./v4cut-1.pl line 5. Unquoted string "cutcoul" may clash with future reserved word at ./v4cut-1.pl line 3. ( Il faut enregistre dans un autre fichier la partie sub cutcoul ou la déplacer parceque ce n'est pas le bon path ?
J'ai réessayé ça :
$arg = shift @ARGV|| die " argument non valide $!"; foreach (@ARGV) &cutcoul; $a = %ARGV sub cut-coul { open (IN, "< $a" )|| die "(pas bien $!)"; open (OUT, ">out.tmp" ) || die "pas ouvert $! "; $cpt=1; while ($line = <IN> ) { if ($line =~ /8001/o) { $cpt++; print OUT $line; close OUT; open (OUT, ">out.tmp"); } else { $b = "$cpt$a"; print OUT $line; rename "out.tmp", $b; } } close OUT; };
Merçi
Ptilou
Jacques Caron
Salut,
On 27 Jun 2005 05:04:04 -0700, wrote:
oui, mais pourquoi ?
opendir != open dir
PERL = Torture des neuronnes !
Des fois oui, mais là faudrait quand même essayer de comprendre ce que tu fais et pas taper pratiquement n'importe quoi au hasard jusqu'à ce que ça marche parce que quelqu'un ici aura corrigé les fautes au fur et à mesure...
$arg = shift @ARGV|| die " argument non valide $!";
Ca ça veut dire que tu vires le premier argument, qui ne sera donc pas un nom de fichier, je suppsoe?
foreach (@ARGV) &cutcoul;
Tu appelles une fonction qui n'a pas ce nom là (cutcoul != cut-cool). Et puis c'est pas super utile dans ce contexte, on a vraiment l'impression que tu essaies n'importe quoi au hasard.
$a = %ARGV
Ca c'est pas possible...
Et si tu essayais tout bêtement ce qu'on t'a déjà proposé?
#!/usr/bin/perl -w
use strict;
for my $a (@ARGV) { # faire ce que tu veux avec le fichier dont le nom est dans $a }
Comme ça tu peux appeler ton script depuis un shell: mon_script *.whatever
Jacques.
Salut,
On 27 Jun 2005 05:04:04 -0700, <ptilou@gmail.com> wrote:
oui, mais pourquoi ?
opendir != open dir
PERL = Torture des neuronnes !
Des fois oui, mais là faudrait quand même essayer de comprendre ce que tu
fais et pas taper pratiquement n'importe quoi au hasard jusqu'à ce que ça
marche parce que quelqu'un ici aura corrigé les fautes au fur et à
mesure...
$arg = shift @ARGV|| die " argument non valide $!";
Ca ça veut dire que tu vires le premier argument, qui ne sera donc pas un
nom de fichier, je suppsoe?
foreach (@ARGV) &cutcoul;
Tu appelles une fonction qui n'a pas ce nom là (cutcoul != cut-cool). Et
puis c'est pas super utile dans ce contexte, on a vraiment l'impression
que tu essaies n'importe quoi au hasard.
$a = %ARGV
Ca c'est pas possible...
Et si tu essayais tout bêtement ce qu'on t'a déjà proposé?
#!/usr/bin/perl -w
use strict;
for my $a (@ARGV)
{
# faire ce que tu veux avec le fichier dont le nom est dans $a
}
Comme ça tu peux appeler ton script depuis un shell: mon_script *.whatever
Des fois oui, mais là faudrait quand même essayer de comprendre ce que tu fais et pas taper pratiquement n'importe quoi au hasard jusqu'à ce que ça marche parce que quelqu'un ici aura corrigé les fautes au fur et à mesure...
$arg = shift @ARGV|| die " argument non valide $!";
Ca ça veut dire que tu vires le premier argument, qui ne sera donc pas un nom de fichier, je suppsoe?
foreach (@ARGV) &cutcoul;
Tu appelles une fonction qui n'a pas ce nom là (cutcoul != cut-cool). Et puis c'est pas super utile dans ce contexte, on a vraiment l'impression que tu essaies n'importe quoi au hasard.
$a = %ARGV
Ca c'est pas possible...
Et si tu essayais tout bêtement ce qu'on t'a déjà proposé?
#!/usr/bin/perl -w
use strict;
for my $a (@ARGV) { # faire ce que tu veux avec le fichier dont le nom est dans $a }
Comme ça tu peux appeler ton script depuis un shell: mon_script *.whatever
Jacques.
Stephane Zuckerman
Paul Gaborit wrote:
À (at) 27 Jun 2005 00:44:05 -0700, écrivait (wrote): [...]
Suis je obligé de passer par un opendir ? (Et abandonner mon script ~~~~~~~
Je comprend pas !
[...]
open dir (DIR, $_ )|| die "le path ?"; ~~~~~~~~
#Marce pas !
Normal !
oui, mais pourquoi ? (Je voudrais comprendre pourquoi une commande
parce que opendir != open dir.
PERL = Torture des neuronnes !
Perl (et non pas PERL) = langage de programmation. Comme tout langage (même bash), il faut lire la doc. Bash te semble plus simple uniquement parce qu'implicitement il te permet d'utiliser les commandes classiques.
Utilise des trucs du genre my $a = `ma commande qui tue`; et tu auras le même comportement qu'en bash ou presque (je ne vois pas trop l'intérêt, mais bon).
J'ai ça comme erreur: Dis, tu voudrais pas lire la doc de Perl (elle est traduite en Français,
à ce que j'ai cru comprendre).
Unquoted string "cutcoul" may clash with future reserved word at ./v4cut-1.pl line 3. Operator or semicolon missing before &cutcoul at ./v4cut-1.pl line 3. Ben voilà, il t'explique gentiment ce qui le gêne : il manque un opérateur
ou un ';' (semicolon) avant ton appel à cutcoul().
Ambiguous use of & resolved as operator & at ./v4cut-1.pl line 3. syntax error at ./v4cut-1.pl line 3, near ") &" Illegal declaration of subroutine main::cut at ./v4cut-1.pl line 5. Unquoted string "cutcoul" may clash with future reserved word at ./v4cut-1.pl line 3.
( Il faut enregistre dans un autre fichier la partie sub cutcoul ou la déplacer parceque ce n'est pas le bon path ?
Il faudrait surtout que tu déclares correctement tes fonctions, en faisant gaffe à ce que tu aies mis tes ';' en fin d'instruction ; tu verras, ça ira tout de suite mieux.
$arg = shift @ARGV|| die " argument non valide $!"; foreach (@ARGV) &cutcoul; $a = %ARGV ?? Pourquoi faire ? Il te manque un ';' au fait
sub cut-coul { open (IN, "< $a" )|| die "(pas bien $!)"; open (OUT, ">out.tmp" ) || die "pas ouvert $! "; $cpt=1; while ($line = <IN> ) { if ($line =~ /8001/o) { $cpt++; print OUT $line; close OUT; open (OUT, ">out.tmp"); } else { $b = "$cpt$a"; print OUT $line; rename "out.tmp", $b; } } close OUT; };
Merçi
Ptilou
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)
Paul Gaborit wrote:
À (at) 27 Jun 2005 00:44:05 -0700,
ptilou@gmail.com écrivait (wrote):
[...]
Suis je obligé de passer par un opendir ? (Et abandonner mon script
~~~~~~~
Je comprend pas !
[...]
open dir (DIR, $_ )|| die "le path ?";
~~~~~~~~
#Marce pas !
Normal !
oui, mais pourquoi ? (Je voudrais comprendre pourquoi une commande
parce que opendir != open dir.
PERL = Torture des neuronnes !
Perl (et non pas PERL) = langage de programmation. Comme tout langage
(même bash), il faut lire la doc. Bash te semble plus simple uniquement
parce qu'implicitement il te permet d'utiliser les commandes classiques.
Utilise des trucs du genre
my $a = `ma commande qui tue`;
et tu auras le même comportement qu'en bash ou presque (je ne vois pas
trop l'intérêt, mais bon).
J'ai ça comme erreur:
Dis, tu voudrais pas lire la doc de Perl (elle est traduite en Français,
à ce que j'ai cru comprendre).
Unquoted string "cutcoul" may clash with future reserved word at
./v4cut-1.pl line 3.
Operator or semicolon missing before &cutcoul at ./v4cut-1.pl line 3.
Ben voilà, il t'explique gentiment ce qui le gêne : il manque un opérateur
ou un ';' (semicolon) avant ton appel à cutcoul().
Ambiguous use of & resolved as operator & at ./v4cut-1.pl line 3.
syntax error at ./v4cut-1.pl line 3, near ") &"
Illegal declaration of subroutine main::cut at ./v4cut-1.pl line 5.
Unquoted string "cutcoul" may clash with future reserved word at
./v4cut-1.pl line 3.
( Il faut enregistre dans un autre fichier la partie sub cutcoul ou la
déplacer parceque ce n'est pas le bon path ?
Il faudrait surtout que tu déclares correctement tes fonctions, en faisant
gaffe à ce que tu aies mis tes ';' en fin d'instruction ; tu verras, ça
ira tout de suite mieux.
$arg = shift @ARGV|| die " argument non valide $!";
foreach (@ARGV) &cutcoul;
$a = %ARGV
?? Pourquoi faire ? Il te manque un ';' au fait
sub cut-coul {
open (IN, "< $a" )|| die "(pas bien $!)";
open (OUT, ">out.tmp" ) || die "pas ouvert $! ";
$cpt=1;
while ($line = <IN> ) {
if ($line =~ /8001/o)
{
$cpt++;
print OUT $line;
close OUT;
open (OUT, ">out.tmp");
}
else
{
$b = "$cpt$a";
print OUT $line;
rename "out.tmp", $b;
}
}
close OUT;
};
Merçi
Ptilou
--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)
À (at) 27 Jun 2005 00:44:05 -0700, écrivait (wrote): [...]
Suis je obligé de passer par un opendir ? (Et abandonner mon script ~~~~~~~
Je comprend pas !
[...]
open dir (DIR, $_ )|| die "le path ?"; ~~~~~~~~
#Marce pas !
Normal !
oui, mais pourquoi ? (Je voudrais comprendre pourquoi une commande
parce que opendir != open dir.
PERL = Torture des neuronnes !
Perl (et non pas PERL) = langage de programmation. Comme tout langage (même bash), il faut lire la doc. Bash te semble plus simple uniquement parce qu'implicitement il te permet d'utiliser les commandes classiques.
Utilise des trucs du genre my $a = `ma commande qui tue`; et tu auras le même comportement qu'en bash ou presque (je ne vois pas trop l'intérêt, mais bon).
J'ai ça comme erreur: Dis, tu voudrais pas lire la doc de Perl (elle est traduite en Français,
à ce que j'ai cru comprendre).
Unquoted string "cutcoul" may clash with future reserved word at ./v4cut-1.pl line 3. Operator or semicolon missing before &cutcoul at ./v4cut-1.pl line 3. Ben voilà, il t'explique gentiment ce qui le gêne : il manque un opérateur
ou un ';' (semicolon) avant ton appel à cutcoul().
Ambiguous use of & resolved as operator & at ./v4cut-1.pl line 3. syntax error at ./v4cut-1.pl line 3, near ") &" Illegal declaration of subroutine main::cut at ./v4cut-1.pl line 5. Unquoted string "cutcoul" may clash with future reserved word at ./v4cut-1.pl line 3.
( Il faut enregistre dans un autre fichier la partie sub cutcoul ou la déplacer parceque ce n'est pas le bon path ?
Il faudrait surtout que tu déclares correctement tes fonctions, en faisant gaffe à ce que tu aies mis tes ';' en fin d'instruction ; tu verras, ça ira tout de suite mieux.
$arg = shift @ARGV|| die " argument non valide $!"; foreach (@ARGV) &cutcoul; $a = %ARGV ?? Pourquoi faire ? Il te manque un ';' au fait
sub cut-coul { open (IN, "< $a" )|| die "(pas bien $!)"; open (OUT, ">out.tmp" ) || die "pas ouvert $! "; $cpt=1; while ($line = <IN> ) { if ($line =~ /8001/o) { $cpt++; print OUT $line; close OUT; open (OUT, ">out.tmp"); } else { $b = "$cpt$a"; print OUT $line; rename "out.tmp", $b; } } close OUT; };
Merçi
Ptilou
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)