my $file = 'books/bookLIST.txt'; open my $info, '<', $file or die "Could not open $file: $!"; my @lines = <$info>; close $info; #### my @vlinks; for my $line (@lines) { chomp($line); my %row; @row{qw/title title2 pages author/} = split /:/, $line, 4; push @vlinks, \%row; } use Data::Dump; dd \@vlinks; #### @vlinks = sort { $a->{title} cmp $b->{title} or $a->{pages} <=> $b->{pages} or $a->{author} cmp $b->{author} } @vlinks; #### for my $vlink (@vlinks) { print "{title2}\">" ."$vlink->{title}$vlink->{pages}" ."$vlink->{author}\n" } #### use Text::CSV; my $file = 'books/bookLIST.txt'; open my $info, '<', $file or die "Could not open $file: $!"; my $csv = Text::CSV->new({binary=>1, auto_diag=>2, sep_char=>":", allow_whitespace=>1 }); $csv->column_names(qw/title title2 pages author/); my @vlinks; while ( my $row = $csv->getline_hr($info) ) { push @vlinks, $row; } $csv->eof or $csv->error_diag; close $info; #### use HTML::Entities qw/encode_entities/; for my $vlink (@vlinks) { print "{title2})."\">" .encode_entities($vlink->{title})."" .encode_entities($vlink->{pages})."" .encode_entities($vlink->{author})."\n" }