%PDF- %PDF-
Direktori : /usr/share/perl5/File/MimeInfo/ |
Current File : //usr/share/perl5/File/MimeInfo/Cookbook.pod |
=head1 NAME File::MimeInfo::Cookbook - various code snippets =head1 DESCRIPTION Some code snippets for non-basic uses of the L<File::MimeInfo> module: =over =item B<Matching an extension> A file does not have to actually exist in order to get a mimetype for it. This means that the following will work: my $extension = '*.txt'; my $mimetype = mimetype( $extension ); =item B<Mimetyping an scalar> If you want to find the mimetype of a scalar value you need magic mimetyping; after all a scalar doesn't have a filename or inode. What you need to do is to use IO::Scalar : use File::MimeInfo::Magic; use IO::Scalar; my $io_scalar = new IO::Scalar \$data; my $mimetype = mimetype( $io_scalar ); In fact most other C<IO::> will work as long as they support the C<seek()> and C<read()> methods. Of course if you want really obscure things to happen you can always write your own IO object and feed it in there. Be aware that when using a filehandle like this you need to set the C<:utf8> binmode yourself if appropriate. =item B<Mimetyping a filehandle> Regrettably for non-seekable filehandles like STDIN simply using an C<IO::> object will not work. You will need to buffer enough of the data for a proper mimetyping. For example you could mimetype data from STDIN like this: use File::MimeInfo::Magic; use IO::Scalar; my $data; read(STDIN, $data, $File::MimeInfo::Magic::max_buffer); my $io_scalar = new IO::Scalar \$data; my $mimetype = mimetype( $io_scalar ); Be aware that when using a filehandle like this you need to set the C<:utf8> binmode yourself if appropriate. =item B<Creating a new filename> Say you have a temporary file that you want to save with a more proper filename. use File::MimeInfo::Magic qw#mimetype extensions#; use File::Copy; my $tmpfile = '/tmp/foo'; my $mimetype = mimetype($tmpfile); my $extension = extensions($mimetype); my $newfile = 'untitled1'; $newfile .= '.'.$extension if length $extension; move($tmpfile, $newfile); =item B<Force the use of a certain database directory> Normally you just need to add the dir where your mime database lives to either the XDG_DATA_HOME or XDG_DATA_DIRS environment variables for it to be found. But in some rare cases you may want to by-pass this system all together. Try one of the following: @File::MimeInfo::DIRS = ('/home/me/share/mime'); eval 'use File::MimeInfo'; die if $@; or: use File::MimeInfo; @File::MimeInfo::DIRS = ('/home/me/share/mime'); File::MimeInfo->rehash(); This can also be used for switching between databases at run time while leaving other XDG configuration stuff alone. =back =head1 AUTHOR Jaap Karssenberg E<lt>pardus@cpan.orgE<gt> Maintained by Michiel Beijen E<lt>mb@x14.nlE<gt> =head1 COPYRIGHT Copyright (c) 2005, 2012 Jaap G Karssenberg. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<File::MimeInfo> =cut