A(z) 17. kódú hibát javító kódrészlet

szerkesztés
sub fix_17 {	# Category double
    my ($error_code, $title_str, $text_str) = @_;

    my $orig_str = $text_str;
    $text_str =~ s/(\[\[(Kategória|Category):[^\]]+\]\]) *\n?/$1\n/gsi;
    my $break = $orig_str eq $text_str;

    my @repeated_categories;
    my %seen;
    my $count = 0;
    while ($text_str =~ m/^((\[\[(Kategória|Category):([^\]]+)\]\]) *)\n/gmsi) {
        my ($pos, $category, $len, $name) =
            (pos($text_str), $2, length($&), $4);
        if (!exists $seen{$name}) {
            $seen{$name} = 1;
            next;
        }
        $pos -= $len;
        unshift(@repeated_categories, {
            'pos'       => $pos,
            len         => $len,
            replacement => '',
        });
        $count++;
    }
    $count or return ('Nincs dupla kategória');
    foreach (@repeated_categories) {
        substr($text_str, $_->{pos}, $_->{len}) = $_->{replacement};
    }

    my $summary_str = $latin2->decode(
        "Bot: $count duplázott kategória törölve. (Hibakód: $error_code)" .
        ($break ?  " Valamint az egymás mellé írt kategóriabesorolások önálló sorokba tördelve." : '')
    );
    return ($summary_str, $count, $text_str);
}