je souhaite faire un if qui ce declenche si la synthaxe de la variable
n'est pas la bonne, mais je ne sais pas faire. Quelqu'un pourrait m'aider ?
En gros, de temps en temps la variable est vide, la pas de probleme
un simple if($ladate eq "") la declenche, mais quand il y a par exemple
$ladate = 'uneerreur'
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre
[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/
[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/
devrait suffire. Attention toutefois que ca valide "2009-01-01n". On preferera peut-etre:
Pour une debutante, je prefere l'application des regles universelles. Pas une lettre -> pour le sens normal.
D'ailleurs, ton truc marche aujourd'hui, mais sans garantie pour le futur. Si un jour on decide que - a un sens particulier, ca cassera (d'accord, c'est peu probable, mais perso, ca ne coute rien de ne pas prendre le risque, donc je le fais).
C'est le cas des { dans les BRE par exemple. Les scripts d'avant l'introduction n'avaient aucune raison d'utiliser { puisque { n'etait pas speciaux, donc c'est safe d'introduire {.
Dans les RE standard, d'ailleurs la norme dit que le comportement des "" suivi par un x symbol ou x n'est pas defini dans la norme est "unspecified" ce qui permet a des implementations de le supporter en tant qu'extension a la norme.
Oui, ben ici, on parle de perl (comp.lang.perl, hein), et precisement, dans perl, ce genre de choses est explicitement prevu. La regle universelle est la suivante: TOUT caractere special peut etre precede d'un pour avoir le caractere lui-meme, independamment de savoir si ce dernier est normalement bizarre ou pas.
C'est un des enormes avantages par rapport aux regexp d'a peu pres n'importe quoi d'autre. Ce que tu ne sais pas ne peut pas t'embeter, a condition de mettre des quand tu n'es pas sur.
Si perl 6 introduit "-" comme operateur de regexp, alors il casse sans equivoque la backward compatibility.
compatibilite avec quoi ? les regexp de perl *sont* des regexps de perl. Elles sont de tres loin liees a ce que tu evoques, mais elles ont ete etendues et modifiees et regularisees depuis des annees. Elles constituent un des gros atouts du langage, par rapport aux autres trucs ou il faut toujours regarder ce que fait ( ou ( selon les cas... au point d'avoir engendre une bibliotheque tellement les gens trouvaient ca pratique.
Je ne vois pas trop l'interet de se poser la question du retour a la ligne a la fin... perl fait a peu pres tout pour qu'on s'en foute, donc sauf mention explicite de problemes lies a ca, je fais comme perl et j'ignore...
sans savoir ce que veut faire le poster, difficile de repondre.
De toutes facons, matcher une date ne suffira pas a l'untainter, donc le probleme d'eventuels exploits, s'il se pose, se reglera differemment...
Dans le cas que tu cites, le gus qui a pondu le CGI merite quelques baffes. L'utilisation bien sentie de -T, c'est quand meme la base pour tout script de ce genre...
In article <slrnhqd1lt.e68.stephane.chazelas@spam.is.invalid>,
Stephane CHAZELAS <stephane_chazelas@yahoo.fr> wrote:
2010-03-21, 14:43(+00), Marc Espie:
In article <slrnhqcamu.83o.stephane.chazelas@spam.is.invalid>,
Stephane CHAZELAS <stephane_chazelas@yahoo.fr> wrote:
2010-03-21, 11:30(+00), Marc Espie:
[...]
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre
[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/
[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/
devrait suffire. Attention toutefois que ca valide
"2009-01-01n". On preferera peut-etre:
Pour une debutante, je prefere l'application des regles universelles.
Pas une lettre -> pour le sens normal.
D'ailleurs, ton truc marche aujourd'hui, mais sans garantie pour le futur.
Si un jour on decide que - a un sens particulier, ca cassera (d'accord, c'est
peu probable, mais perso, ca ne coute rien de ne pas prendre le risque, donc
je le fais).
C'est le cas des { dans les BRE par exemple. Les scripts
d'avant l'introduction n'avaient aucune raison d'utiliser {
puisque { n'etait pas speciaux, donc c'est safe d'introduire {.
Dans les RE standard, d'ailleurs la norme dit que le
comportement des "" suivi par un x symbol ou x n'est pas
defini dans la norme est "unspecified" ce qui permet a des
implementations de le supporter en tant qu'extension a la norme.
Oui, ben ici, on parle de perl (comp.lang.perl, hein), et precisement,
dans perl, ce genre de choses est explicitement prevu. La regle universelle
est la suivante: TOUT caractere special peut etre precede d'un pour avoir
le caractere lui-meme, independamment de savoir si ce dernier est normalement
bizarre ou pas.
C'est un des enormes avantages par rapport aux regexp d'a peu pres n'importe
quoi d'autre. Ce que tu ne sais pas ne peut pas t'embeter, a condition
de mettre des quand tu n'es pas sur.
Si perl 6 introduit "-" comme operateur de regexp, alors il
casse sans equivoque la backward compatibility.
compatibilite avec quoi ? les regexp de perl *sont* des regexps de perl.
Elles sont de tres loin liees a ce que tu evoques, mais elles ont ete etendues
et modifiees et regularisees depuis des annees. Elles constituent un des
gros atouts du langage, par rapport aux autres trucs ou il faut toujours
regarder ce que fait ( ou ( selon les cas... au point d'avoir engendre une
bibliotheque tellement les gens trouvaient ca pratique.
Je ne vois pas trop l'interet de se poser la question du retour a la ligne
a la fin... perl fait a peu pres tout pour qu'on s'en foute, donc sauf mention
explicite de problemes lies a ca, je fais comme perl et j'ignore...
sans savoir ce que veut faire le poster, difficile de repondre.
De toutes facons, matcher une date ne suffira pas a l'untainter,
donc le probleme d'eventuels exploits, s'il se pose, se reglera
differemment...
Dans le cas que tu cites, le gus qui a pondu le CGI merite quelques baffes.
L'utilisation bien sentie de -T, c'est quand meme la base pour tout script
de ce genre...
a savoir que ce n'est pas du 4chiffres-2chiffres-2chiffre
[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/
[...]
$ladate =~ m/^d{4}-d{2}-d{2}$/
devrait suffire. Attention toutefois que ca valide "2009-01-01n". On preferera peut-etre:
Pour une debutante, je prefere l'application des regles universelles. Pas une lettre -> pour le sens normal.
D'ailleurs, ton truc marche aujourd'hui, mais sans garantie pour le futur. Si un jour on decide que - a un sens particulier, ca cassera (d'accord, c'est peu probable, mais perso, ca ne coute rien de ne pas prendre le risque, donc je le fais).
C'est le cas des { dans les BRE par exemple. Les scripts d'avant l'introduction n'avaient aucune raison d'utiliser { puisque { n'etait pas speciaux, donc c'est safe d'introduire {.
Dans les RE standard, d'ailleurs la norme dit que le comportement des "" suivi par un x symbol ou x n'est pas defini dans la norme est "unspecified" ce qui permet a des implementations de le supporter en tant qu'extension a la norme.
Oui, ben ici, on parle de perl (comp.lang.perl, hein), et precisement, dans perl, ce genre de choses est explicitement prevu. La regle universelle est la suivante: TOUT caractere special peut etre precede d'un pour avoir le caractere lui-meme, independamment de savoir si ce dernier est normalement bizarre ou pas.
C'est un des enormes avantages par rapport aux regexp d'a peu pres n'importe quoi d'autre. Ce que tu ne sais pas ne peut pas t'embeter, a condition de mettre des quand tu n'es pas sur.
Si perl 6 introduit "-" comme operateur de regexp, alors il casse sans equivoque la backward compatibility.
compatibilite avec quoi ? les regexp de perl *sont* des regexps de perl. Elles sont de tres loin liees a ce que tu evoques, mais elles ont ete etendues et modifiees et regularisees depuis des annees. Elles constituent un des gros atouts du langage, par rapport aux autres trucs ou il faut toujours regarder ce que fait ( ou ( selon les cas... au point d'avoir engendre une bibliotheque tellement les gens trouvaient ca pratique.
Je ne vois pas trop l'interet de se poser la question du retour a la ligne a la fin... perl fait a peu pres tout pour qu'on s'en foute, donc sauf mention explicite de problemes lies a ca, je fais comme perl et j'ignore...
sans savoir ce que veut faire le poster, difficile de repondre.
De toutes facons, matcher une date ne suffira pas a l'untainter, donc le probleme d'eventuels exploits, s'il se pose, se reglera differemment...
Dans le cas que tu cites, le gus qui a pondu le CGI merite quelques baffes. L'utilisation bien sentie de -T, c'est quand meme la base pour tout script de ce genre...
Stephane CHAZELAS
2010-03-21, 21:12(+00), Marc Espie: [...]
et modifiees et regularisees depuis des annees. Elles constituent un des gros atouts du langage, par rapport aux autres trucs ou il faut toujours regarder ce que fait ( ou ( selon les cas... au point d'avoir engendre une bibliotheque tellement les gens trouvaient ca pratique.
[...]
Mais tu viens de dire que tous les caracteres non-lettre devraient etre precedés d'un parce qu'ils pourraient devenir speciaux dans une version future, je ne suis pas sur qu'on y gagne en lisibilité.
Si perl 6 introduit "-" comme operateur de regexp, alors il casse sans equivoque la backward compatibility.
compatibilite avec quoi ?
[...]
Avec perl 5.
Un script ecrit pour perl 5 qui fait $x =~ /foo-bar/
ne marchera plus avec perl 6 si perl 6 introduit "-" comme operateur de regexp.
Dans le cas que tu cites, le gus qui a pondu le CGI merite quelques baffes. L'utilisation bien sentie de -T, c'est quand meme la base pour tout script de ce genre...
D'accord, mais une autre erreur serait de se reposer totalement sur "-T" et de ne pas reflechir un peu.
Mon probleme c'est que $x = /^d{4}-d{2}-d{2}$/ est misleading car il ne fait pas ce qu'il suggere qu'il fait.
-- Stéphane
2010-03-21, 21:12(+00), Marc Espie:
[...]
et modifiees et regularisees depuis des annees. Elles constituent un des
gros atouts du langage, par rapport aux autres trucs ou il faut toujours
regarder ce que fait ( ou ( selon les cas... au point d'avoir engendre une
bibliotheque tellement les gens trouvaient ca pratique.
[...]
Mais tu viens de dire que tous les caracteres non-lettre
devraient etre precedés d'un parce qu'ils pourraient devenir
speciaux dans une version future, je ne suis pas sur qu'on y
gagne en lisibilité.
Si perl 6 introduit "-" comme operateur de regexp, alors il
casse sans equivoque la backward compatibility.
compatibilite avec quoi ?
[...]
Avec perl 5.
Un script ecrit pour perl 5 qui fait $x =~ /foo-bar/
ne marchera plus avec perl 6 si perl 6 introduit "-" comme
operateur de regexp.
Dans le cas que tu cites, le gus qui a pondu le CGI merite quelques baffes.
L'utilisation bien sentie de -T, c'est quand meme la base pour tout script
de ce genre...
D'accord, mais une autre erreur serait de se reposer totalement
sur "-T" et de ne pas reflechir un peu.
Mon probleme c'est que $x = /^d{4}-d{2}-d{2}$/ est misleading
car il ne fait pas ce qu'il suggere qu'il fait.
et modifiees et regularisees depuis des annees. Elles constituent un des gros atouts du langage, par rapport aux autres trucs ou il faut toujours regarder ce que fait ( ou ( selon les cas... au point d'avoir engendre une bibliotheque tellement les gens trouvaient ca pratique.
[...]
Mais tu viens de dire que tous les caracteres non-lettre devraient etre precedés d'un parce qu'ils pourraient devenir speciaux dans une version future, je ne suis pas sur qu'on y gagne en lisibilité.
Si perl 6 introduit "-" comme operateur de regexp, alors il casse sans equivoque la backward compatibility.
compatibilite avec quoi ?
[...]
Avec perl 5.
Un script ecrit pour perl 5 qui fait $x =~ /foo-bar/
ne marchera plus avec perl 6 si perl 6 introduit "-" comme operateur de regexp.
Dans le cas que tu cites, le gus qui a pondu le CGI merite quelques baffes. L'utilisation bien sentie de -T, c'est quand meme la base pour tout script de ce genre...
D'accord, mais une autre erreur serait de se reposer totalement sur "-T" et de ne pas reflechir un peu.
Mon probleme c'est que $x = /^d{4}-d{2}-d{2}$/ est misleading car il ne fait pas ce qu'il suggere qu'il fait.
-- Stéphane
Paul Gaborit
À (at) Sun, 21 Mar 2010 22:13:12 +0000 (UTC), Stephane CHAZELAS écrivait (wrote):
2010-03-21, 21:12(+00), Marc Espie: [...]
et modifiees et regularisees depuis des annees. Elles constituent un des gros atouts du langage, par rapport aux autres trucs ou il faut toujours regarder ce que fait ( ou ( selon les cas... au point d'avoir engendre une bibliotheque tellement les gens trouvaient ca pratique.
[...]
Mais tu viens de dire que tous les caracteres non-lettre devraient etre precedés d'un parce qu'ils pourraient devenir speciaux dans une version future, je ne suis pas sur qu'on y gagne en lisibilité.
C'est pourtant le (bon) conseil donné depuis toujours par la documentation pour écrire des regexp en Perl. Et c'est exactement ce que fait la fonction 'quotemeta'.
Un script ecrit pour perl 5 qui fait $x =~ /foo-bar/
ne marchera plus avec perl 6 si perl 6 introduit "-" comme operateur de regexp.
C'est tout à fait cela... sauf si ce script est compilé en mode compatibilité Perl5.
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
À (at) Sun, 21 Mar 2010 22:13:12 +0000 (UTC),
Stephane CHAZELAS <stephane_chazelas@yahoo.fr> écrivait (wrote):
2010-03-21, 21:12(+00), Marc Espie:
[...]
et modifiees et regularisees depuis des annees. Elles constituent un des
gros atouts du langage, par rapport aux autres trucs ou il faut toujours
regarder ce que fait ( ou ( selon les cas... au point d'avoir engendre une
bibliotheque tellement les gens trouvaient ca pratique.
[...]
Mais tu viens de dire que tous les caracteres non-lettre
devraient etre precedés d'un parce qu'ils pourraient devenir
speciaux dans une version future, je ne suis pas sur qu'on y
gagne en lisibilité.
C'est pourtant le (bon) conseil donné depuis toujours par la
documentation pour écrire des regexp en Perl. Et c'est exactement ce que
fait la fonction 'quotemeta'.
Un script ecrit pour perl 5 qui fait $x =~ /foo-bar/
ne marchera plus avec perl 6 si perl 6 introduit "-" comme
operateur de regexp.
C'est tout à fait cela... sauf si ce script est compilé en mode
compatibilité Perl5.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
À (at) Sun, 21 Mar 2010 22:13:12 +0000 (UTC), Stephane CHAZELAS écrivait (wrote):
2010-03-21, 21:12(+00), Marc Espie: [...]
et modifiees et regularisees depuis des annees. Elles constituent un des gros atouts du langage, par rapport aux autres trucs ou il faut toujours regarder ce que fait ( ou ( selon les cas... au point d'avoir engendre une bibliotheque tellement les gens trouvaient ca pratique.
[...]
Mais tu viens de dire que tous les caracteres non-lettre devraient etre precedés d'un parce qu'ils pourraient devenir speciaux dans une version future, je ne suis pas sur qu'on y gagne en lisibilité.
C'est pourtant le (bon) conseil donné depuis toujours par la documentation pour écrire des regexp en Perl. Et c'est exactement ce que fait la fonction 'quotemeta'.
Un script ecrit pour perl 5 qui fait $x =~ /foo-bar/
ne marchera plus avec perl 6 si perl 6 introduit "-" comme operateur de regexp.
C'est tout à fait cela... sauf si ce script est compilé en mode compatibilité Perl5.
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
espie
In article , Stephane CHAZELAS wrote:
2010-03-21, 21:12(+00), Marc Espie:
Dans le cas que tu cites, le gus qui a pondu le CGI merite quelques baffes. L'utilisation bien sentie de -T, c'est quand meme la base pour tout script de ce genre...
D'accord, mais une autre erreur serait de se reposer totalement sur "-T" et de ne pas reflechir un peu.
Il n'y a que toi qui parles de se reposer totalement sur "-T" ici. Il est evident que -T n'exclus pas de reflechir un peu, mais deja, -T permet d'eviter un certain nombre d'erreurs embarrassantes, pourquoi s'en priver.
Mon probleme c'est que $x = /^d{4}-d{2}-d{2}$/ est misleading car il ne fait pas ce qu'il suggere qu'il fait.
Misleading pour toi, car il ne fait pas ce que tu penses qu'il devrait faire... tres pratique pour une grosse partie du reste du monde, parce qu'il fait exactement ce qu'on lui demande: valider une chaine de caracteres, independamment d'un n qui pourrait trainer par la.
Perso, si j'ai un n potentiel qui m'embete, je vais utiliser chomp, et pas z... sauf cas tres exceptionnel.
In article <slrnhqd6fo.f6a.stephane.chazelas@spam.is.invalid>,
Stephane CHAZELAS <stephane_chazelas@yahoo.fr> wrote:
2010-03-21, 21:12(+00), Marc Espie:
Dans le cas que tu cites, le gus qui a pondu le CGI merite quelques baffes.
L'utilisation bien sentie de -T, c'est quand meme la base pour tout script
de ce genre...
D'accord, mais une autre erreur serait de se reposer totalement
sur "-T" et de ne pas reflechir un peu.
Il n'y a que toi qui parles de se reposer totalement sur "-T" ici.
Il est evident que -T n'exclus pas de reflechir un peu, mais deja, -T
permet d'eviter un certain nombre d'erreurs embarrassantes, pourquoi
s'en priver.
Mon probleme c'est que $x = /^d{4}-d{2}-d{2}$/ est misleading
car il ne fait pas ce qu'il suggere qu'il fait.
Misleading pour toi, car il ne fait pas ce que tu penses qu'il devrait
faire... tres pratique pour une grosse partie du reste du monde, parce
qu'il fait exactement ce qu'on lui demande: valider une chaine de
caracteres, independamment d'un n qui pourrait trainer par la.
Perso, si j'ai un n potentiel qui m'embete, je vais utiliser chomp, et
pas z... sauf cas tres exceptionnel.
Dans le cas que tu cites, le gus qui a pondu le CGI merite quelques baffes. L'utilisation bien sentie de -T, c'est quand meme la base pour tout script de ce genre...
D'accord, mais une autre erreur serait de se reposer totalement sur "-T" et de ne pas reflechir un peu.
Il n'y a que toi qui parles de se reposer totalement sur "-T" ici. Il est evident que -T n'exclus pas de reflechir un peu, mais deja, -T permet d'eviter un certain nombre d'erreurs embarrassantes, pourquoi s'en priver.
Mon probleme c'est que $x = /^d{4}-d{2}-d{2}$/ est misleading car il ne fait pas ce qu'il suggere qu'il fait.
Misleading pour toi, car il ne fait pas ce que tu penses qu'il devrait faire... tres pratique pour une grosse partie du reste du monde, parce qu'il fait exactement ce qu'on lui demande: valider une chaine de caracteres, independamment d'un n qui pourrait trainer par la.
Perso, si j'ai un n potentiel qui m'embete, je vais utiliser chomp, et pas z... sauf cas tres exceptionnel.
Stephane CHAZELAS
2010-03-22, 09:50(+00), Marc Espie:
In article , Stephane CHAZELAS wrote:
[...]
Mon probleme c'est que $x = /^d{4}-d{2}-d{2}$/ est misleading car il ne fait pas ce qu'il suggere qu'il fait.
Misleading pour toi, car il ne fait pas ce que tu penses qu'il devrait faire... tres pratique pour une grosse partie du reste du monde, parce qu'il fait exactement ce qu'on lui demande: valider une chaine de caracteres, independamment d'un n qui pourrait trainer par la.
Perso, si j'ai un n potentiel qui m'embete, je vais utiliser chomp, et pas z... sauf cas tres exceptionnel.
[...]
Tu vas typiquement utiliser chomp quand tu t'attends a avoir un n terminal comme quand tu lis du texte d'un fichier ou texte, probablement pas quand tu ne t'y attends pas (comme quand l'input vient de @ARGV, @_ ou %ENV ($QUERYSTRING, $PATH par exemple))
Peut-etre que cette discussion fera prendre conscience de ce risque a quelqu'un.
-- Stéphane
2010-03-22, 09:50(+00), Marc Espie:
In article <slrnhqd6fo.f6a.stephane.chazelas@spam.is.invalid>,
Stephane CHAZELAS <stephane_chazelas@yahoo.fr> wrote:
[...]
Mon probleme c'est que $x = /^d{4}-d{2}-d{2}$/ est misleading
car il ne fait pas ce qu'il suggere qu'il fait.
Misleading pour toi, car il ne fait pas ce que tu penses qu'il devrait
faire... tres pratique pour une grosse partie du reste du monde, parce
qu'il fait exactement ce qu'on lui demande: valider une chaine de
caracteres, independamment d'un n qui pourrait trainer par la.
Perso, si j'ai un n potentiel qui m'embete, je vais utiliser chomp, et
pas z... sauf cas tres exceptionnel.
[...]
Tu vas typiquement utiliser chomp quand tu t'attends a avoir un
n terminal comme quand tu lis du texte d'un fichier ou texte,
probablement pas quand tu ne t'y attends pas (comme quand
l'input vient de @ARGV, @_ ou %ENV ($QUERYSTRING, $PATH par
exemple))
Peut-etre que cette discussion fera prendre conscience de ce
risque a quelqu'un.
Mon probleme c'est que $x = /^d{4}-d{2}-d{2}$/ est misleading car il ne fait pas ce qu'il suggere qu'il fait.
Misleading pour toi, car il ne fait pas ce que tu penses qu'il devrait faire... tres pratique pour une grosse partie du reste du monde, parce qu'il fait exactement ce qu'on lui demande: valider une chaine de caracteres, independamment d'un n qui pourrait trainer par la.
Perso, si j'ai un n potentiel qui m'embete, je vais utiliser chomp, et pas z... sauf cas tres exceptionnel.
[...]
Tu vas typiquement utiliser chomp quand tu t'attends a avoir un n terminal comme quand tu lis du texte d'un fichier ou texte, probablement pas quand tu ne t'y attends pas (comme quand l'input vient de @ARGV, @_ ou %ENV ($QUERYSTRING, $PATH par exemple))
Peut-etre que cette discussion fera prendre conscience de ce risque a quelqu'un.