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...
- if (ref $filename eq 'GLOB') {
+ if (defined fileno($filename)) {
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...
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.