>perl -wMstrict -le "use List::MoreUtils qw(part); use Data::Dump; ;; my @ra = ( 'CPU Temp = 30', 'GFX Temp = 45', 'RAM Temp = 40', '', 'CPU Status = OK', 'GFX Status = OK', 'RAM Status = OK', ); ;; my $p = 1; my @parts = part { m{ \A \s* \z }xms ? ($p = 2, 0) : $p } @ra; dd \@parts; ;; my @pointer = \my (@ra_1, @ra_2); my $pp = 0; m{ \A \s* \z }xms ? $pp = 1 : push @{ $pointer[$pp] }, $_ for @ra; dd \@ra_1; dd \@ra_2; ;; my %hash; m{ \b (Temp|Status) \b }xms and push @{ $hash{$1} }, $_ for @ra; dd \%hash; " [ [""], ["CPU Temp = 30", "GFX Temp = 45", "RAM Temp = 40"], ["CPU Status = OK", "GFX Status = OK", "RAM Status = OK"], ] ["CPU Temp = 30", "GFX Temp = 45", "RAM Temp = 40"] ["CPU Status = OK", "GFX Status = OK", "RAM Status = OK"] { Status => ["CPU Status = OK", "GFX Status = OK", "RAM Status = OK"], Temp => ["CPU Temp = 30", "GFX Temp = 45", "RAM Temp = 40"], }