Файловый дескриптор может быть даже не подключен к файлу, а вместо этого к сетевому сокету или каналу, подключенному к стандартному выводу дочернего процесса.
Если вы хотите связать дескрипторы с путями, которые открывает ваш код, используйте хеш и оператор fileno
, например, ,
my %fileno2path;
sub myopen {
my($path) = @_;
open my $fh, "<", $path or die "$0: open: $!";
$fileno2path{fileno $fh} = $path;
$fh;
}
sub myclose {
my($fh) = @_;
delete $fileno2path{fileno $fh};
close $fh or warn "$0: close: $!";
}
sub path {
my($fh) = @_;
$fileno2path{fileno $fh};
}