Как насчет просто удалить его:
foreach my $file (@files) {
$file =~ s:^\Q$path/::;
print "$file\n";
}
Примечание: это фактически изменит содержание @files
.
Согласно комментариям это не работает, поэтому давайте протестируем полную программу:
#!/usr/local/bin/perl
use warnings;
use strict;
use File::Find;
my $path = "/usr/share/skel";
chdir($path);
my @files;
find(\&d, "$path");
foreach my $file (@files) {
$file =~ s:^\Q$path/::;
print "$file\n";
}
sub d {
-f and -r and push @files, $File::Find::name;
}
Я получаю вывод
$ ./find.pl
dot.cshrc
dot.login
dot.login_conf
dot.mailrc
dot.profile
dot.shrc
Мне кажется, это работает нормально. Я также проверил это с каталогами с подкаталогами, и нет никаких проблем.