#!/usr/bin/perl use warnings; use strict; use Audio::MPD; my $mpd = Audio::MPD->new; my $pl = $mpd->playlist; my @items = $pl->as_items; my %items_to_delete; my %files; for my $item (@items) { my ($name,$type) = $item->file =~ m/(.+)\.([^\.]+)/; if (exists $files{$name}{$type}) { $items_to_delete{$item->id} = 1; next; } $files{$name}{$type} = $item->id; if (exists $files{$name}{flac}) { $items_to_delete{$_} = 1 foreach values %{$files{$name}}; delete $items_to_delete{$files{$name}{flac}} } elsif (exists $files{$name}{ogg}) { $items_to_delete{$_} = 1 foreach values %{$files{$name}}; delete $items_to_delete{$files{$name}{ogg}} } } $pl->deleteid(keys %items_to_delete);