remplacer du texte par une fonction contenue dans un hachage avec une regexp
Le
Le TeXnicien de surface

bonjour à toutes et tous
j'ai un hachage de fonctions :
my %MACROS=(
B => &textbold,
); # à compléter
sub textbold{
my ($T,@pbl) = @_;
$T = "<b>$T</b>";
return $T;
}
en début de fichier
quand je fais un appel direct comme
$texte = $MACROS{B}("en gras");
print "$texte";
tout baigne
mais je voudrais pouvoir remplacer
@B{un truc à mettre en gras}
et j'essaie ceci :
à un moment j'ai
# $li contient du texte et sans ce qui suit, tout va bien
$li = &developperaux($li) if($li =~ m/@/);
# puis je voudrais reprendre avec $li où les @B{machin} ont été
# remplacés correctement
et plus bas
sub developperaux{
my ($L,@pbl) = @_;
$L =~ s/@([^{]+){([^}]+)}/$MACROS{$1}($2)/eg;
return $L;
}
j'ai alors
Use of uninitialized value in subroutine entry at ./R2html.pl line 129,
<SOURCE> line 32.
Undefined subroutine &main:: called at ./R2html.pl line 129, <SOURCE>
line 32.
La ligne 129 correspond à la ligne contenant
la tentative de remplacement dans le sub.
Si quelqu'un pouvait m'éclairer, je lui en serai très reconnaissant.
--
Le TeXnicien de surface
j'ai un hachage de fonctions :
my %MACROS=(
B => &textbold,
); # à compléter
sub textbold{
my ($T,@pbl) = @_;
$T = "<b>$T</b>";
return $T;
}
en début de fichier
quand je fais un appel direct comme
$texte = $MACROS{B}("en gras");
print "$texte";
tout baigne
mais je voudrais pouvoir remplacer
@B{un truc à mettre en gras}
et j'essaie ceci :
à un moment j'ai
# $li contient du texte et sans ce qui suit, tout va bien
$li = &developperaux($li) if($li =~ m/@/);
# puis je voudrais reprendre avec $li où les @B{machin} ont été
# remplacés correctement
et plus bas
sub developperaux{
my ($L,@pbl) = @_;
$L =~ s/@([^{]+){([^}]+)}/$MACROS{$1}($2)/eg;
return $L;
}
j'ai alors
Use of uninitialized value in subroutine entry at ./R2html.pl line 129,
<SOURCE> line 32.
Undefined subroutine &main:: called at ./R2html.pl line 129, <SOURCE>
line 32.
La ligne 129 correspond à la ligne contenant
la tentative de remplacement dans le sub.
Si quelqu'un pouvait m'éclairer, je lui en serai très reconnaissant.
--
Le TeXnicien de surface
Désolé pour le bruit, j'avais trop simplifié pour poser
la question et j'ai mal interprété le message d'erreur.
Bref, j'ai été vraiment mauvais :(
Cela dit, la vraie formule est
$L =~ s/@([^{]+){([^}]+)}/$MACROS{$1}($2)/eg;
par contre ça n'aime pas que la "macro" ne soit pas définie.
encore toutes mes excuses
--
Le TeXnicien de surface