「E」が出現するたびに文字列を分割しようとしています。しかし、出力では、以前の破損ループで以前に到着した部分文字列をスキップしたいと考えています。たとえば。「E」が文字列$s='ABCDEABCDEABCDEABCD'
の 5 番目、10 番目、15 番目の位置に存在する文字列を取得すると、位置 10 での破損の結果として表示される部分文字列は、位置 15 での切断の結果として生じる部分文字列には表示されません。以下に示すスクリプト'E' のすべての位置でブレークします。しかし、部分文字列の繰り返しを止めることはできません。助けてください!
my $s = 'ABCDEAXBCDEAYBCDEAZBCD';
my @where; my @array;my @final;
my $result; my $j;
for ($j = 0; $j <= 2; $j++) {
$where[j] = index($s,"E",$where[j-1]) + 1;
push @array, $where[j];
}
for my $array (@array) {
substr($s, $array-1, 1) = "\0";
my @a = split(/E(?!P)/, $s);
substr($s, $array-1, 1) = 'E';
$_ =~ s/\0/E/g foreach (@a);
$result = join ("E,", @a).'E';
@final = split(/,/, $result);
print "@final\n";
}
私が得ている出力は次のとおりです。
ABCDEAXBCDE AYBCDE AZBCDE
ABCDE AXBCDEAYBCDE AZBCDE
ABCDE AXBCDE AYBCDEAZBCDE
期待される出力:
ABCDEAXBCDE AYBCDE AZBCDE
ABCDE AXBCDEAYBCDE
AXBCDE AYBCDEAZBCDE