Bonjour tout le monde
J'ai un probléme pour substituer une variable reconnu dans une boucle
foreach
pouvez vous d'indiquer mon/mes erreurs
ou un autre moyen d'y arriver?
merci.
Bonjour tout le monde
J'ai un probléme pour substituer une variable reconnu dans une boucle
foreach
pouvez vous d'indiquer mon/mes erreurs
ou un autre moyen d'y arriver?
merci.
Bonjour tout le monde
J'ai un probléme pour substituer une variable reconnu dans une boucle
foreach
pouvez vous d'indiquer mon/mes erreurs
ou un autre moyen d'y arriver?
merci.
Alain Adelmar writes:Bonjour tout le monde
J'ai un probléme pour substituer une variable reconnu dans une boucle
foreach
pouvez vous d'indiquer mon/mes erreurs
ou un autre moyen d'y arriver?
merci.
L'erreur fondamentale me semble être l'absence du bloc suivant en tête
de fichier:
use strict;
use warnings;
En activant ne serait-ce que warnings, perl nous dit tout seul (par
chance, mais ça suffira pour notre cas) ce qui ne va pas:
"my" variable $ligne_type masks earlier declaration in same scope at subst.pl line 33.
30> my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
33> $nwline =(my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg);
Telle quelle, ces lignes ne sont pas de simples substitution, ce sont
d'abord des déclarations de variables. Mais la valeur initiale d'une
variable, c'est undef, et c'est à cet undef que la substitution va
s'appliquer. D'ailleurs, ça n'échappe pas non plus à perl:
Use of uninitialized value in substitution (s///) at subst.pl line 30.
Use of uninitialized value in substitution (s///) at subst.pl line 33.
Il suffit d'ôter les mot-clé `my' de ces deux lignes pour que tout
rentre dans l'ordre. Enfin... pour en arriver à l'erreur suivante:
Can't find Unicode property definition "u" at subst.pl line 30.
30> $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
Maintenant, le problème est que notre regex est mal formée. Ça ne
saut pas aux yeux parce qu'elle est cachée dans la variable $oldlb.
La valeur de $oldlb à ce moment-ci nous a été donnée par le script
juste avant:
oldlb vaut C:pubXWindow-User-HOWTO-VF.html
Or en contexte regex, le caractère peut définir des métacaractères.
En l'occurrence, p a le fonctionnement suivant:
pP Reconnaît la propriété P (nommée). Utilisez p{Prop}
pour les noms longs
Source: http://perl.enstimac.fr/DocFr/perlre.html#expressions%20rationnelles
Ce n'est pas du tout ce qu'on veut (contrairement à la ligne [ my
@ls_m = ($ligne_type =~ /$mot/ig) ] du début). Ici, la variable
intégrée à la regex n'est pas une regex elle-même, mais une simple
chaine. Il faut informer perl de la traiter comme telle. C'est
expliqué quelques lignes plus haut dans la documentation vers laquelle
je viens de pointer.
Avec toutes ces corrections, j'en arrive au résultat final suivant:
ligne_type vaut maintenant <a href="toto">Retour</a>| <a href="toto">Suivant</a>| <a href="toto">Sommaire</a>
Résultat des courses
--------------------
1) use strict; use warnings;
Toujours. Toujours. Toujours.
2) Utiliser `my', c'est bien. D'ailleurs, strict ne laisse pas
vraiment le choix. Par contre, il faut savoir ce qu'il fait.
3) Attention à l'interpolation de variables dans les regex!
Une bonne convention de nommage peut aider à s'y retrouver, par
exemple en suffixant toutes les variables qui contiennent des regex
par _re.
Conseil: si c'est pour gérer du HTML et des URI, il existe déjà de
nombreux modules qui font ça très bien et même mieux en plus simple et
plus fiable.
Alain Adelmar <aadelmar@free.fr> writes:
Bonjour tout le monde
J'ai un probléme pour substituer une variable reconnu dans une boucle
foreach
pouvez vous d'indiquer mon/mes erreurs
ou un autre moyen d'y arriver?
merci.
L'erreur fondamentale me semble être l'absence du bloc suivant en tête
de fichier:
use strict;
use warnings;
En activant ne serait-ce que warnings, perl nous dit tout seul (par
chance, mais ça suffira pour notre cas) ce qui ne va pas:
"my" variable $ligne_type masks earlier declaration in same scope at subst.pl line 33.
30> my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
33> $nwline =(my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg);
Telle quelle, ces lignes ne sont pas de simples substitution, ce sont
d'abord des déclarations de variables. Mais la valeur initiale d'une
variable, c'est undef, et c'est à cet undef que la substitution va
s'appliquer. D'ailleurs, ça n'échappe pas non plus à perl:
Use of uninitialized value in substitution (s///) at subst.pl line 30.
Use of uninitialized value in substitution (s///) at subst.pl line 33.
Il suffit d'ôter les mot-clé `my' de ces deux lignes pour que tout
rentre dans l'ordre. Enfin... pour en arriver à l'erreur suivante:
Can't find Unicode property definition "u" at subst.pl line 30.
30> $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
Maintenant, le problème est que notre regex est mal formée. Ça ne
saut pas aux yeux parce qu'elle est cachée dans la variable $oldlb.
La valeur de $oldlb à ce moment-ci nous a été donnée par le script
juste avant:
oldlb vaut C:pubXWindow-User-HOWTO-VF.html
Or en contexte regex, le caractère peut définir des métacaractères.
En l'occurrence, p a le fonctionnement suivant:
pP Reconnaît la propriété P (nommée). Utilisez p{Prop}
pour les noms longs
Source: http://perl.enstimac.fr/DocFr/perlre.html#expressions%20rationnelles
Ce n'est pas du tout ce qu'on veut (contrairement à la ligne [ my
@ls_m = ($ligne_type =~ /$mot/ig) ] du début). Ici, la variable
intégrée à la regex n'est pas une regex elle-même, mais une simple
chaine. Il faut informer perl de la traiter comme telle. C'est
expliqué quelques lignes plus haut dans la documentation vers laquelle
je viens de pointer.
Avec toutes ces corrections, j'en arrive au résultat final suivant:
ligne_type vaut maintenant <a href="toto">Retour</a>| <a href="toto">Suivant</a>| <a href="toto">Sommaire</a>
Résultat des courses
--------------------
1) use strict; use warnings;
Toujours. Toujours. Toujours.
2) Utiliser `my', c'est bien. D'ailleurs, strict ne laisse pas
vraiment le choix. Par contre, il faut savoir ce qu'il fait.
3) Attention à l'interpolation de variables dans les regex!
Une bonne convention de nommage peut aider à s'y retrouver, par
exemple en suffixant toutes les variables qui contiennent des regex
par _re.
Conseil: si c'est pour gérer du HTML et des URI, il existe déjà de
nombreux modules qui font ça très bien et même mieux en plus simple et
plus fiable.
Alain Adelmar writes:Bonjour tout le monde
J'ai un probléme pour substituer une variable reconnu dans une boucle
foreach
pouvez vous d'indiquer mon/mes erreurs
ou un autre moyen d'y arriver?
merci.
L'erreur fondamentale me semble être l'absence du bloc suivant en tête
de fichier:
use strict;
use warnings;
En activant ne serait-ce que warnings, perl nous dit tout seul (par
chance, mais ça suffira pour notre cas) ce qui ne va pas:
"my" variable $ligne_type masks earlier declaration in same scope at subst.pl line 33.
30> my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
33> $nwline =(my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg);
Telle quelle, ces lignes ne sont pas de simples substitution, ce sont
d'abord des déclarations de variables. Mais la valeur initiale d'une
variable, c'est undef, et c'est à cet undef que la substitution va
s'appliquer. D'ailleurs, ça n'échappe pas non plus à perl:
Use of uninitialized value in substitution (s///) at subst.pl line 30.
Use of uninitialized value in substitution (s///) at subst.pl line 33.
Il suffit d'ôter les mot-clé `my' de ces deux lignes pour que tout
rentre dans l'ordre. Enfin... pour en arriver à l'erreur suivante:
Can't find Unicode property definition "u" at subst.pl line 30.
30> $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
Maintenant, le problème est que notre regex est mal formée. Ça ne
saut pas aux yeux parce qu'elle est cachée dans la variable $oldlb.
La valeur de $oldlb à ce moment-ci nous a été donnée par le script
juste avant:
oldlb vaut C:pubXWindow-User-HOWTO-VF.html
Or en contexte regex, le caractère peut définir des métacaractères.
En l'occurrence, p a le fonctionnement suivant:
pP Reconnaît la propriété P (nommée). Utilisez p{Prop}
pour les noms longs
Source: http://perl.enstimac.fr/DocFr/perlre.html#expressions%20rationnelles
Ce n'est pas du tout ce qu'on veut (contrairement à la ligne [ my
@ls_m = ($ligne_type =~ /$mot/ig) ] du début). Ici, la variable
intégrée à la regex n'est pas une regex elle-même, mais une simple
chaine. Il faut informer perl de la traiter comme telle. C'est
expliqué quelques lignes plus haut dans la documentation vers laquelle
je viens de pointer.
Avec toutes ces corrections, j'en arrive au résultat final suivant:
ligne_type vaut maintenant <a href="toto">Retour</a>| <a href="toto">Suivant</a>| <a href="toto">Sommaire</a>
Résultat des courses
--------------------
1) use strict; use warnings;
Toujours. Toujours. Toujours.
2) Utiliser `my', c'est bien. D'ailleurs, strict ne laisse pas
vraiment le choix. Par contre, il faut savoir ce qu'il fait.
3) Attention à l'interpolation de variables dans les regex!
Une bonne convention de nommage peut aider à s'y retrouver, par
exemple en suffixant toutes les variables qui contiennent des regex
par _re.
Conseil: si c'est pour gérer du HTML et des URI, il existe déjà de
nombreux modules qui font ça très bien et même mieux en plus simple et
plus fiable.
Alain Adelmar writes:Bonjour tout le monde
J'ai un probléme pour substituer une variable reconnu dans une boucle
foreach
pouvez vous d'indiquer mon/mes erreurs
ou un autre moyen d'y arriver?
merci.
L'erreur fondamentale me semble être l'absence du bloc suivant en tête
de fichier:
use strict;
use warnings;
En activant ne serait-ce que warnings, perl nous dit tout seul (par
chance, mais ça suffira pour notre cas) ce qui ne va pas:
"my" variable $ligne_type masks earlier declaration in same scope at subst.pl line 33.
30> my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
33> $nwline =(my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg);
Telle quelle, ces lignes ne sont pas de simples substitution, ce sont
d'abord des déclarations de variables. Mais la valeur initiale d'une
variable, c'est undef, et c'est à cet undef que la substitution va
s'appliquer. D'ailleurs, ça n'échappe pas non plus à perl:
Use of uninitialized value in substitution (s///) at subst.pl line 30.
Use of uninitialized value in substitution (s///) at subst.pl line 33.
Il suffit d'ôter les mot-clé `my' de ces deux lignes pour que tout
rentre dans l'ordre. Enfin... pour en arriver à l'erreur suivante:
Can't find Unicode property definition "u" at subst.pl line 30.
30> $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
Maintenant, le problème est que notre regex est mal formée. Ça ne
saut pas aux yeux parce qu'elle est cachée dans la variable $oldlb.
La valeur de $oldlb à ce moment-ci nous a été donnée par le script
juste avant:
oldlb vaut C:pubXWindow-User-HOWTO-VF.html
Or en contexte regex, le caractère peut définir des métacaractères.
En l'occurrence, p a le fonctionnement suivant:
pP Reconnaît la propriété P (nommée). Utilisez p{Prop}
pour les noms longs
Source: http://perl.enstimac.fr/DocFr/perlre.html#expressions%20rationnelles
Ce n'est pas du tout ce qu'on veut (contrairement à la ligne [ my
@ls_m = ($ligne_type =~ /$mot/ig) ] du début). Ici, la variable
intégrée à la regex n'est pas une regex elle-même, mais une simple
chaine. Il faut informer perl de la traiter comme telle. C'est
expliqué quelques lignes plus haut dans la documentation vers laquelle
je viens de pointer.
Avec toutes ces corrections, j'en arrive au résultat final suivant:
ligne_type vaut maintenant <a href="toto">Retour</a>| <a href="toto">Suivant</a>| <a href="toto">Sommaire</a>
Résultat des courses
--------------------
1) use strict; use warnings;
Toujours. Toujours. Toujours.
2) Utiliser `my', c'est bien. D'ailleurs, strict ne laisse pas
vraiment le choix. Par contre, il faut savoir ce qu'il fait.
3) Attention à l'interpolation de variables dans les regex!
Une bonne convention de nommage peut aider à s'y retrouver, par
exemple en suffixant toutes les variables qui contiennent des regex
par _re.
Conseil: si c'est pour gérer du HTML et des URI, il existe déjà de
nombreux modules qui font ça très bien et même mieux en plus simple et
plus fiable.
Alain Adelmar <aadelmar@free.fr> writes:
Bonjour tout le monde
J'ai un probléme pour substituer une variable reconnu dans une boucle
foreach
pouvez vous d'indiquer mon/mes erreurs
ou un autre moyen d'y arriver?
merci.
L'erreur fondamentale me semble être l'absence du bloc suivant en tête
de fichier:
use strict;
use warnings;
En activant ne serait-ce que warnings, perl nous dit tout seul (par
chance, mais ça suffira pour notre cas) ce qui ne va pas:
"my" variable $ligne_type masks earlier declaration in same scope at subst.pl line 33.
30> my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
33> $nwline =(my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg);
Telle quelle, ces lignes ne sont pas de simples substitution, ce sont
d'abord des déclarations de variables. Mais la valeur initiale d'une
variable, c'est undef, et c'est à cet undef que la substitution va
s'appliquer. D'ailleurs, ça n'échappe pas non plus à perl:
Use of uninitialized value in substitution (s///) at subst.pl line 30.
Use of uninitialized value in substitution (s///) at subst.pl line 33.
Il suffit d'ôter les mot-clé `my' de ces deux lignes pour que tout
rentre dans l'ordre. Enfin... pour en arriver à l'erreur suivante:
Can't find Unicode property definition "u" at subst.pl line 30.
30> $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
Maintenant, le problème est que notre regex est mal formée. Ça ne
saut pas aux yeux parce qu'elle est cachée dans la variable $oldlb.
La valeur de $oldlb à ce moment-ci nous a été donnée par le script
juste avant:
oldlb vaut C:pubXWindow-User-HOWTO-VF.html
Or en contexte regex, le caractère peut définir des métacaractères.
En l'occurrence, p a le fonctionnement suivant:
pP Reconnaît la propriété P (nommée). Utilisez p{Prop}
pour les noms longs
Source: http://perl.enstimac.fr/DocFr/perlre.html#expressions%20rationnelles
Ce n'est pas du tout ce qu'on veut (contrairement à la ligne [ my
@ls_m = ($ligne_type =~ /$mot/ig) ] du début). Ici, la variable
intégrée à la regex n'est pas une regex elle-même, mais une simple
chaine. Il faut informer perl de la traiter comme telle. C'est
expliqué quelques lignes plus haut dans la documentation vers laquelle
je viens de pointer.
Avec toutes ces corrections, j'en arrive au résultat final suivant:
ligne_type vaut maintenant <a href="toto">Retour</a>| <a href="toto">Suivant</a>| <a href="toto">Sommaire</a>
Résultat des courses
--------------------
1) use strict; use warnings;
Toujours. Toujours. Toujours.
2) Utiliser `my', c'est bien. D'ailleurs, strict ne laisse pas
vraiment le choix. Par contre, il faut savoir ce qu'il fait.
3) Attention à l'interpolation de variables dans les regex!
Une bonne convention de nommage peut aider à s'y retrouver, par
exemple en suffixant toutes les variables qui contiennent des regex
par _re.
Conseil: si c'est pour gérer du HTML et des URI, il existe déjà de
nombreux modules qui font ça très bien et même mieux en plus simple et
plus fiable.
Alain Adelmar writes:Bonjour tout le monde
J'ai un probléme pour substituer une variable reconnu dans une boucle
foreach
pouvez vous d'indiquer mon/mes erreurs
ou un autre moyen d'y arriver?
merci.
L'erreur fondamentale me semble être l'absence du bloc suivant en tête
de fichier:
use strict;
use warnings;
En activant ne serait-ce que warnings, perl nous dit tout seul (par
chance, mais ça suffira pour notre cas) ce qui ne va pas:
"my" variable $ligne_type masks earlier declaration in same scope at subst.pl line 33.
30> my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
33> $nwline =(my $ligne_type =~ s/()$oldlb()/$1$toto$2/isg);
Telle quelle, ces lignes ne sont pas de simples substitution, ce sont
d'abord des déclarations de variables. Mais la valeur initiale d'une
variable, c'est undef, et c'est à cet undef que la substitution va
s'appliquer. D'ailleurs, ça n'échappe pas non plus à perl:
Use of uninitialized value in substitution (s///) at subst.pl line 30.
Use of uninitialized value in substitution (s///) at subst.pl line 33.
Il suffit d'ôter les mot-clé `my' de ces deux lignes pour que tout
rentre dans l'ordre. Enfin... pour en arriver à l'erreur suivante:
Can't find Unicode property definition "u" at subst.pl line 30.
30> $ligne_type =~ s/()$oldlb()/$1$toto$2/isg;
Maintenant, le problème est que notre regex est mal formée. Ça ne
saut pas aux yeux parce qu'elle est cachée dans la variable $oldlb.
La valeur de $oldlb à ce moment-ci nous a été donnée par le script
juste avant:
oldlb vaut C:pubXWindow-User-HOWTO-VF.html
Or en contexte regex, le caractère peut définir des métacaractères.
En l'occurrence, p a le fonctionnement suivant:
pP Reconnaît la propriété P (nommée). Utilisez p{Prop}
pour les noms longs
Source: http://perl.enstimac.fr/DocFr/perlre.html#expressions%20rationnelles
Ce n'est pas du tout ce qu'on veut (contrairement à la ligne [ my
@ls_m = ($ligne_type =~ /$mot/ig) ] du début). Ici, la variable
intégrée à la regex n'est pas une regex elle-même, mais une simple
chaine. Il faut informer perl de la traiter comme telle. C'est
expliqué quelques lignes plus haut dans la documentation vers laquelle
je viens de pointer.
Avec toutes ces corrections, j'en arrive au résultat final suivant:
ligne_type vaut maintenant <a href="toto">Retour</a>| <a href="toto">Suivant</a>| <a href="toto">Sommaire</a>
Résultat des courses
--------------------
1) use strict; use warnings;
Toujours. Toujours. Toujours.
2) Utiliser `my', c'est bien. D'ailleurs, strict ne laisse pas
vraiment le choix. Par contre, il faut savoir ce qu'il fait.
3) Attention à l'interpolation de variables dans les regex!
Une bonne convention de nommage peut aider à s'y retrouver, par
exemple en suffixant toutes les variables qui contiennent des regex
par _re.
Conseil: si c'est pour gérer du HTML et des URI, il existe déjà de
nombreux modules qui font ça très bien et même mieux en plus simple et
plus fiable.