#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $string = 'Test1 Test2 Test3 "Test 4" Test5'; my @words = grep{ defined $_ and $_ ne q{} }($string =~ /\s*"(.*?)"\s*|\s*(\S*)\s*/g); print Dumper(\@words);