im array @VerzeichnisInhalt befinden sich nur die dateinamen ohne pfad. von daher sollte das skript eh nur korrekt laufen, wenn du dich in dem durchsuchten verzeichnis befindest.
ausserdem fehlen strict und warnings, alles in allem sieht das nach etwas veraltetem perl aus.
lies mal Modern Perl - The Book.
Zu finden z.b. hier: 
http://perl-tutorial.org/
hier eine etwas bereinigte variante:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use strict;
use warnings;
use MP3::Tag;
my $Verzeichnis = '/home/liam';
opendir my $dh, $Verzeichnis or die "Kann $Verzeichnis nicht oeffnen: $!";
my @VerzeichnisInhalt = grep { m/\.mp3$/ } readdir $dh;
closedir $dh;
foreach my $file (@VerzeichnisInhalt) {  
    my $mp3 = MP3::Tag->new("$Verzeichnis/$file"); 
    $mp3->get_tags(); 
    my ($artist, $title, $track);
    if (exists $mp3->{ID3v2}) { 
        $artist = $mp3->{ID3v2}->artist;
        $title  = $mp3->{ID3v2}->title;
        $track  = $mp3->{ID3v2}->track;
    }
    my $eintrag = "$track $artist - $title";
    print "$eintrag\n";
}
 
 
was du mit "qtracklist" meinst, ist mir leider auch nicht klar.
in einem array zusammenfassen geht so:
am anfang: 
my @tracklist;
in der schleife: 
push @tracklist, $eintrag;