2017-06-01 1 views

Répondre

6

Utilisez baby cart@{[ ]} de perlsecret

$html =~ s[<p>(.+?)</p>][<li value="@{[++$count]}">$1</li>]gis; 

De perldoc

La façon dont cela fonctionne est que lorsque le @ {...} est vu dans la chaîne entre guillemets, il est évalué comme un bloc. Le bloc crée une référence à un tableau anonyme contenant les résultats de eval.

+0

Pouvez-vous expliquer ce que vous avez fait? Crée-t-il un tableau ou quelque chose? – CJ7

+0

@ CJ7 Post édité. – mkHun

2

Vous pouvez utiliser le modificateur /e pour transformer la partie de substitution du s/// dans une expression Perl qui est évaluée une fois par substitution. Parce que c'est une expression complète, vous devez mettre le reste de votre chaîne entre guillemets. J'ai utilisé des guillemets simples et doubles pour la partie sans et avec interpolation respectivement.

my $html = "<p>foo</p><p>bar</p>"; 
my $count = 0; 
$html =~ s[<p>(.+?)</p>]['<li value="'.++$count.qq{">$1</li>}]gise; 

print $html; 

__END__ 
<li value="1">foo</li><li value="2">bar</li>