use warnings; use strict; while (my $address = ) { my ($street, $number) = ( $address =~ / \A # start of string ( \w{3} \. \s \w{3} \s \w{3} ) # 'aaa. bbb ccc' \s # followed by a space (?:nr\. \s )? # optional 'nr. ' \w{3} # 'ddd' (\d+) # 'ddd...' /ix ); print "Street: $street, Number: $number\n"; } exit; __DATA__ aaa. bbb ccc nr. ddd23-56