2017-06-01 1 views
2
$html =~ s[<p>(.+?)</p>][<li value="++$count">$1</li>]gis; 

上記のコードはどのようにして達成できますか?グローバル置換で変数を増やす方法は?

++$countは、行われる置換のたびに増分する数字にする必要があります。

+0

'$ htmlの=〜S [

(。+?)

] [ ''。$ 1" '] esgi; ' – ssr1012

答えて

6

使用baby cartperldoc

それが動作する方法から、perlsecret

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

から@{[ ]}は、@ {...}は、二重引用符で囲まれた文字列で見たとき、それはだということですブロックとして評価されます。ブロックは、evalの結果を含む無名配列への参照を作成します。あなたは、置換ごとに一度だけ評価されたPerlの式にs///の置換部分をオンにする/e修飾子を使用することができます

+0

あなたがしたことを説明してもらえますか?それは配列か何かを作成していますか? – CJ7

+0

@ CJ7ポストが編集されました。 – mkHun

2

$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> 
関連する問題