#!/usr/bin/env perl use strict; use warnings; use diagnostics; use feature 'say'; while () { chomp; if ($_ ne q{}) { s/Positive\sfor\s//; while (/ (?:and\s)? ((?:\w+\s)+) # Remember disease name \( ([^\)]+) # Remember list of family members \) /xg) { my ($disease, @persons) = ($1, map { s/^\s+//; s/\s+$//; $_; } split /;|,/, $2); $disease =~ s/\s$//; foreach my $person (@persons) { say "$person || $disease"; } } } } close DATA or die 'Could not close DATA: ', $!; __DATA__ Positive for Depression ( mother ; sister ), Type 2 Diabetes ( father ; mother ; grandparents ) and Anxiety ( mother) . Cancer ( mother, grandmother ) #### mother || Depression sister || Depression father || Type 2 Diabetes mother || Type 2 Diabetes grandparents || Type 2 Diabetes mother || Anxiety mother || Cancer grandmother || Cancer