NAME
File::Path::Redirect - Poor mans symbolic link path redirection
SYNOPSIS
use File::Path::Redirect;
# Run this example in 'examples' dir
# Create a test file to link to
#
my $source_path="path_to_file.txt";
my $contents="Probably a large file";
open my $fh, ">", $source_path or die $!;
print $fh $contents;
close $fh;
# 'Link' or redirect a file to another
#
my $link_path="my_link.txt";
make_redirect($source_path, $link_path);
# Elsewhere in the application normal and redirect files are tested
my $path=follow_redirect($link_path);
# open/process $path as normal
open my $f,"<", $path or die $!;
while(<$f>){
print $_;
}
DESCRIPTION
This module implements a handful of functions implementing 'user space' file path redirection, similar to a symbolic link on your file system.
It supports chained redirect files, with recursion limit.
WHY SHOULD I USE THIS?
-
Not all File Systems support Sumbolic links
For example FAT and exFAT variants do not support symbolic links.
-
Symbolic links only work withing the same volume
If you wanted to symbolic link to a file on a different volume, you can't
-
Copying files my night be feasable
Slow and size constrained external media means extra copies of large files might not fit. Also slow devices would take too long to physically copy
HOW IT WORKS
The redirect ( or link ) file is just a basic text file. It contains a single line of the format:
!<symlink>PATH
!<symlink> is a magic header PATH is the relative path to a file it links to. It can be a link to another link file.
Before using a path in an open function, the path can be passed to
follow_redirect. The return value is the path of the first non link file
found. This is path can be used in the open call instead.
API
Creating Redirects
make_redirect
my $path = make_redirect $existing_file, $link_file, $force;
Creates a new redirect file at $link_file containing a link to the file located at $existing_file.
$existing_file can be a relative or absolute path.
The file is only created if $link_file doesn't already exist, or $force
is a true value.
Returns the relative path between the two files if possible, otherwise a absolute path. Dies on any IO related errors in creating / opening / writing / closing the link file.
Using Redirects
follow_redirect
my $path = follow_redirect $file_path, $limit;
Given a file path $path, it attempts to open the file, check it is a
redirect file. If so it parses and follows the link path. The process is
recursive until the file does not look like a link path, or until the total
number of redirects is equal to or greater than $limit.
$limit is an optional parameter and by default is 10.
Returns the final redirect path. The path could be relative or absolute.
Dies on any IO errors when processing a redirect chain.
PERFORMANCE CONSIDERATIONS
Each redirect file encountered is opened and read. For repeated access to the
same file, it is best to store the results of the follow_redirect function.
For more comprehensive solution, File::Meta::Cache (which uses this module) might suit your needs
REPOSITORY and BUG REPORTING
Please report any bugs and feature requests on the repo page: GitHub
AUTHOR
Ruben Westerberg, drclaw@mac.com
COPYRIGHT AND LICENSE
Copyright (C) 2026 by Ruben Westerberg
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, or under the MIT license