>> text
>>> text
####
>> text
PYTHON_PROMPT text
####
foreach (split("==========\n", <<'__EOI__'))
>>> i = q
==========
YES
>>> i = q
==========
>>> i = q
YES
==========
>>> i = q
>>
==========
>>
>>> i = q
==========
>>> i = q
>> No!
==========
>> No!
>>> i = q
==========
YES
>>> i = q
YES
>>> i = q
==========
>>> i = q
>> No!
YES
>>> i = q <--- FAILS!!
__EOI__
####
{
s/
\G
( # $1
(?:
# Substitution prevented by preceeding ">>"
>> (?!>) [^\n]* \n >>> [^\n]* \n
|
(?! >> ) [^\n]* \n
)*
)
>>>
( # $2
[^\n]* \n
)
# Substitution supressed by following ">>".
(?! >> (?!>))
/${1}PYTHON_PROMPT${2}/xg;
print;
print("==========\n");
}
####
foreach (split("==========\n", <<'__EOI__'))
>>> i = q
==========
YES
>>> i = q
==========
>>> i = q
YES
==========
>>> i = q
>>
==========
>>
>>> i = q
==========
>>> i = q
>> No!
==========
>> No!
>>> i = q
==========
YES
>>> i = q
YES
>>> i = q
==========
>>> i = q
>> No!
YES
>>> i = q
__EOI__
####
{
foreach ($_) {
if (/\G (?= >>> )/xgc) {
# Substitution supressed by following ">>".
redo if /\G >>> [^\n]* \n (?= >> (?!>) ) /xcg;
# Do substitution.
s/\G >>>/PYTHON_PROMPT/xcg;
# Go process next line.
/\G [^\n]* \n /xcg;
redo;
}
# Substitution prevented by preceeding ">>"
/\G >> (?!>) [^\n]* \n >>> [^\n]* \n /xcg && redo;
# ^^^^^ optional due to statement order.
# Go process next line.
m/\G [^\n]* \n /xcg && redo;
}
print;
print("==========\n");
}