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: !PATH ! 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, 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