どう書く?

Server error

指定したフォルダ以下にある、ファイル名が"~"で終わるファイルを削除するプログラムを作ってください。指定したフォルダの中にあるフォルダのさらに中にあるファイルも削除の対象です。

こう!

# dma.pl
$ARGV[0] or die "Usage: $0 DIRECTORY...\n";

foreach my $dir (@ARGV) {
    dfswalk(
        $dir,
        sub {
            my $path = shift;
            if ($path =~ /~$/ and -f $path) {
                unlink($path) or warn("$path: $!\n");
            }
        }
    );
};

sub dfswalk
{
    my ($dir, $fn) = @_;
    
    opendir(D, $dir) or die "$dir: $!\n";
    foreach my $name (readdir(D)) {
        next if ($name eq '.' or $name eq '..');
        my $path = sprintf("%s/%s", $dir, $name);
        
        &$fn($path);
        if (-d $path) {
            dfswalk($path, $fn);
        }
    }
    closedir(D);
}

とかやろうと思ったんですが、いろいろバグってるのが気になって萎えました。
まだ様子見か。
あと、投稿しようと思って気づいたんですが、方向性が分からないです。短く書いたほうが優勝! とか。
面白そうだなーとは思ったんですが。