$html =~ s[<p>(.+?)</p>][<li value="++$count">$1</li>]gis;
如何在perl中实现上述代码?
我需要++$count
是一个为每次发生的替换增加的数字。
答案 0 :(得分:6)
使用perlsecret中的baby cart @{[ ]}
$html =~ s[<p>(.+?)</p>][<li value="@{[++$count]}">$1</li>]gis;
来自perldoc
它的工作方式是当在双引号字符串中看到@ {...}时,它被评估为一个块。该块创建对包含eval结果的匿名数组的引用。
答案 1 :(得分:2)
您可以使用/e
修饰符将s///
的替换部分转换为每次替换评估一次的Perl表达式。
$html =~ s[<p>(.+?)</p>]['<li value="'.++$count.qq{">$1</li>}]gise;
因为它是一个完整的表达式,所以你需要将其余的字符串放入引号中。我使用单引号和双引号分别没有插值和插值。
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>