You seem to want the flip-flop operator. Ref: Range Operators in perlop. A "state variable" is not needed because the state is stored in the operator.
?type 1223291.pl
use strict;
use warnings;
my @cleared = (
'JOB::HEREISASTRING',
'Something',
'StringA',
'StringB',
'StringC',
'StringD',
'Something Else',
'StringE',
'StringF',
'StringG',
'StringH ',
'JOB::HEREISANOTHERSTRING',
'Something',
'StringI',
'StringJ',
'StringK',
'StringL',
'Something Else',
'StringM',
'StringN',
'StringO',
'StringP ',
);
foreach (@cleared) {
if (/JOB::(.*)/){
print $_, "\n";
next;
}
print '~~Something';
if ( !(/Something$/ ... /Something Else$/) or /Else/) {
print ' Else';
}
print "~~$_\n";
}
?perl 1223291.pl
JOB::HEREISASTRING
~~Something~~Something
~~Something~~StringA
~~Something~~StringB
~~Something~~StringC
~~Something~~StringD
~~Something Else~~Something Else
~~Something Else~~StringE
~~Something Else~~StringF
~~Something Else~~StringG
~~Something Else~~StringH
JOB::HEREISANOTHERSTRING
~~Something~~Something
~~Something~~StringI
~~Something~~StringJ
~~Something~~StringK
~~Something~~StringL
~~Something Else~~Something Else
~~Something Else~~StringM
~~Something Else~~StringN
~~Something Else~~StringO
~~Something Else~~StringP
?
UPDATE: Added reference
|