Ciao, ho ricontrollato il codice, lo esegue ma mi genera un file vuoto. Ti commento il codice per vedere se sbaglio qualcosa:

opendir (DIR, "D:/traceroute") or die "Non posso aprire la directory. Errore: $!\n";
@files = grep { /^\./ && -f "D:/traceroute/$_" } readdir(DIR);
closedir DIR;
# la directory la apre, la sintessa del grep è corretta
open (DATA, ">D:/traceroute/Ciao.txt") or die "Non posso scrivere su D:/traceroute/Ciao.txt. Errore: $!\n";
# Il file Ciao.txt me lo crea
foreach $file (sort @files)
{
$file =/Prova.txt/;
#visto che non mi scriveva niente su Ciao.txt, come file gli ho dato un singolo file dal nome Prova.txt
$record = "";
$record = $1;
open (FILE, "D:/traceroute/$file") or die "Non posso leggere D:/traceroute/$file. Errore: $!\n";
while (<FILE>) {
$_ =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/;
# la sintassi per trovare l'IP è corretta, se faccio una prova in cui voglio trovare un IP da stringa funziona, nel mio caso invece su Ciao.txt non scrive nulla
$record .= " - $&";
#ho provato a togliere il punto davanti all'uguale ma niente; poi una domanda: cosa vuol dire quello dopo l'uguale?
}
close FILE;
print DATA "$record\n";
}
close DATA;

Grazie e ciao ciao