use strict;
while (<DATA>) {
my @fields = /([^\s"]+|(?:[^\s"]*"[^"]*"[^\s"]*)+)(?:\s|$)/g;
print "$_\n" for @fields; }
__DATA__
1 2 3 4 5
1 "2 3" 4 5
1 2" 3 " 4 5
1 2" 3 "4 5
1 2" 3 "4" 5" 6
1 2" 3 "4"" 5"" 6
dXNlIHN0cmljdDsKCndoaWxlICg8REFUQT4pIHsgCiAgICBjaG9tcCAkXzsKICAgIG15IEBmaWVsZHMgPSAvKFteXHMiXSt8KD86W15ccyJdKiJbXiJdKiJbXlxzIl0qKSspKD86XHN8JCkvZzsKICAgIHByaW50ICIkX1xuIiBmb3IgQGZpZWxkczsKICAgIHByaW50ICJcbiI7Cn0KCl9fREFUQV9fCgoxIDIgMyA0IDUKMSAiMiAzIiA0IDUKMSAyIiAzICIgNCA1IAoxIDIiIDMgIjQgNSAKMSAyIiAzICI0IiA1IiA2CjEgMiIgMyAiNCIiIDUiIiA2Cg==