Instead of relying of there being at least two spaces between fields, you could work on the fact that there are always 6 fields the last 5 not contain whitespace and do:
perl -lpe 's/^\s*(.*?)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*$/$1,$2,$3,$4,$5,$6/' file Saint Petersburg,0,10,0.1,-,N Moscow,-,9,0,-,N Novgorod,0,7,1,30,Y
Or to make sure that the output is valid CSV, use the Text::CSV module which will ensure fields are quoted if needed:
$ perl -MText::CSV -lne ' BEGIN{$c = Text::CSV->new({binary=>1})} $c->print(*STDOUT, \@{^CAPTURE}) if /^\s*(.*?)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*$/' file2 "Saint Petersburg",0,10,0.1,-,N "Moscow, Russia Capital",-,9,0,-,N Novgorod,0,7,1,30,Y
bashalone? Are the fields separated by tabs?od:od -c file.csv.