Yes, I forced File::MMagic->new() and printed what was returned from checktype_contents().
It is invariably application/octet-stream which makes me think that the reference to the system magic
file has been lost between the time I constructed a new MMagic object and it is used (although I dumped
the object variable and that shows the same address).
My version is 1.27 like yours, Perl is v5.14.4.
Here is part of my initialisation code. As you can see, I have commented out references to magic files
(the system file name is passed through hash member 'magicmime' while a fall-back file exists
in the private library lib.
The initial part of the file to test is read-in separately before calling one of the two functions
defined in the "configuration" hash.
my $magic = File::MMagic->new ( # -f $self->{'magicmime'}
# ? $self->{'magicmime'}
# : -f 'lib/magic.mime' ? 'lib/magic
+.mime' : ()
);
$self->{'&discard'} = sub { 'text/' ne substr($magic->checktype_co
+ntents(@_[0]), 0, 5) };
# Same, to return the complete MIME type
$self->{'&mimetype'} = sub {$magic->checktype_contents(@_[0])};
Function &discard seems to work fine (at least it returns true on text files). Function &mimetype
returns either text/plain or application/octet-stream on my test files.
I may have made a big mistake in my code as I'm using a non-scope variable binding for $magic:
when the functions are called, the block containing my $magic has disappeared for a long time. |