2009-07-04 6 views

Répondre

4

Ce code semble indiquer qu'il ne s'applique qu'à la version IO :: Scalar de open. C'est probablement parce qu'il n'y a pas de fileno de niveau d'OS sous-jacent associé au handle de fichier.

#!/usr/bin/perl 

use 5.010; 
use strict; 
use warnings; 

my $fakefile = "foo\nbar\nbaz\n"; 
open my $fake, "<", \$fakefile 
    or die "could not open fakefile [$fakefile]: $!"; 

open my $script, "<", $0 
    or die "could not open self for reading: $!"; 

print "fake: ", my_fileno($fakefile), "\nreal: ", my_fileno($script), "\n"; 

sub my_fileno { 
    my $fileno = fileno shift; 
    $fileno //= "undef"; 
    return $fileno; 
} 
+0

Je suppose que cela s'applique uniquement à IO :: Scalar comme vous l'avez indiqué. –

+0

Bien, mais ce n'est qu'une supposition. J'espère que quelqu'un qui sait pour sûr répondra ou commentera. –

+1

Je pense que la clé est "objets mémoire", mais perldoc -f open ne mentionne pas "objets mémoire". Il mentionne "" dans la mémoire "les fichiers" qui peuvent ou peuvent ne pas être la même chose. Je sens un patch de documentation. –