Thread Ist eine Variable ein Filehandle?
(4 answers)
Opened by pq at 2016-02-21 13:59
Gibt es vielleicht ein Modul, um zu prüfen, ob eine Variable ein Filehandle ist?
Wir haben gestern diesen Pull Request für YAML::XS gemerged: https://github.com/ingydotnet/yaml-libyaml-pm/comm... Unglücklicherweise stirbt fileno($var), wenn $var ein Objekt ist, was kein Filehandle ist (beispielsweise Path::Class::File). Nun habe ich den Code aus File::Copy kopiert: https://github.com/perlpunk/yaml-libyaml-pm/commit... Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 sub _from_a_handle { my ($var) = @_; my $from_a_handle = ( ref($var) ? ( ref($var) eq 'GLOB' || UNIVERSAL::isa($var, 'GLOB' ) || UNIVERSAL::isa($var, 'IO::Handle') ) : (ref(\$var) eq 'GLOB') ); return $from_a_handle; } Der benutzt UNIVERSAL::isa, das heisst, das funktioniert nicht, wenn die Klasse isa() überschreibt. Das ist vermutlich ein seltener Fall, den man fixen könnte, indem man eine weitere Prüfung einbaut und dann $var->isa aufruft. Aber mich würde interessieren, ob es mittlerweile ein Modul gibt, was solch eine Prüfung für mich macht. Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |