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

remplacer du texte par une fonction contenue dans un hachage avec une regexp

1 réponse
Avatar
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\n";
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

1 réponse

Avatar
Le TeXnicien de surface
Le 23/11/2012 19:42, Le TeXnicien de surface a écrit :
bonjour à toutes et tous



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