in reply to Sort this data

Or, if you just read that data into that array from disk you can likely do it all in one pass. The trick here is that you said that there are blank lines. You can rig perl up so that it looks for double blanks when reading "lines" and then split your data on the single linefeed that divides your data up:
my @LoH; { local $/="\n\n"; # may be "\r\n\r\n" under windows... while (<>) { my ($t, $a, $l) = split /\n/; push @LoH, { Title => $t, Author => $a, List => $l }; } }

I should probably have added this to the other post but I had just edited it like 5 times. =P

--
$you = new YOU;
honk() if $you->love(perl)