#!/usr/bin/perl use Audio::FLAC::Header; my (%t, %m, $f, $i, $flac, $tn); for $f (@ARGV) { if ($flac = Audio::FLAC::Header->new($f)) { $i = $flac->tags(); $tn = (grep /tracknum/i, keys %$i)[0]; $t{$f} = $$i{$tn} || 'ndef'; # tag track num $m{$f} = (stat($f))[9]; # mtime } else { warn "Couldn't get header for $f"; } } ## try track order, fall-back to mtime. for (sort { $t{$a} != $t{$b} ? $t{$a} <=> $t{$b} : $m{$a} <=> $m{$b} }keys %t) { #print "$_ $t{$_} $m{$_}\n"; print "$_\n"; }