$str = " ... "; # The data you posted my @data; foreach my $line (split /\n\s*/, $str) { if (/^MAC Address:\s*(\S+)/) { push @data, {mac_address => $1} } elsif (/^IP addr:\s*(\S+)/) { $data[-1]{ip_address} = $1; } elsif (/^Link Speed:\s*(\S+)/) { $data[-1]{link_speed} = $1; } elsif (/^Link Cost:\s*(\S+)/) { $data[-1]{link_cost} = $1; } } printf "Node with MAC Address: %s has IP = %s and Link Speed = %s and Link Cost = %s\n", $_->{mac_address}, $_->{ip_address}, $_->{link_speed}, $_->{link_cost} for @data;