Nos akkor 2. nekifutás:
while( $file_content =~ s/([^']+?)('[^']*?')//sm )
{
my $pre=$1;
my $middle=$2;
$pre =~ s/\s+/ /g;
$result=$result.$pre.$middle;
}
A /s az elején azér kell, hogy 2x ne találjuk meg ugyan azt a részt.
A +? a "non greedy match" azaz nem a lehető leghoszabb részre illik, hanem a legkisebbre.
A cucc feltételezi, hogy a teljes inputot előzőleg beolvastuk $file_content -be. Az eredményt meg ki kell írni a végén valahová. Ha a bemenetben soronkénti rekordok vannak, akkor ezen lehet finomítani.
Szerintem ez alapján el lehet indulni.