NAME

File::Redirect - override native perl file oprations

SYNOPSIS

$ unzip -l Foo-Bar-0.01.zip
Archive:  Foo-Bar-0.01.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  02-25-12 07:46   Foo-Bar-0.01/
        0  02-25-12 07:47   Foo-Bar-0.01/lib/
        0  02-25-12 07:47   Foo-Bar-0.01/lib/Foo/
       43  02-25-12 07:47   Foo-Bar-0.01/lib/Foo/Bar.pm
 --------                   -------
       43                   4 files

$ unzip -p Foo-Bar-0.01.zip Foo-Bar-0.01/lib/Foo/Bar.pm 
package Foo::Bar;
sub foo { 42 }
1;

$ cat test.pl 
use File::Redirect::lib ('Zip', 'Foo-Bar-0.01.zip', '/Foo-Bar-0.01/lib');
use Foo::Bar;
print Foo::Bar::foo(), "\n";

$ perl test.pl
42

DESCRIPTION

Perl's own use and require cannot be overloaded so that underlying file requests are mapped to something else. This module hacks IO layer system so that one can fool Perl's IO into thinking that it operates on files while feeding something else, for example archives.

The framework currently overrides only stat and open builtins, which is enough for hacking into use and require. The framework though is capable of being extended to override other file- and dir- based operations, but that's probably is easier to do separately by overriding *CORE::GLOBAL:: functions.

Warning: works only if perl's PERL_IMPLICIT_SYS is enabled

API

mount $provider, $request, $as_path

Similar to unix mount(1) command, the function 'mounts' an abstract data entity ($request) into file path $as_path by sending it to $provider. For example, provider Simple treats request as path-content hash. After this command

mount( 'Simple', { 'a' => 'b' }, 'simple:')

reading from file 'simple:a' yield 'b' as its content. See also File::Redirect::Zip.

The function return success flag; on failure, $@ contains the error.

umount $path

Removes data entity associated with $path.

AUTHOR

Dmitry Karasik, <dmitry@karasik.eu.org>.