在一个简单的 web 应用程序中,我需要将 URL 映射到文件名或文件路径。
这个应用程序有一个要求,它只能依赖于核心 Perl 发行版(5.6.0 和更高版本)中的模块。问题是大多数文件系统上的文件名长度限制为 255。另一个限制是单个文件夹中有大约 32k 个子目录。
我的解决方案:
my $filename = $url;
if (length($filename) > $MAXPATHLEN) { # if filename longer than 255
my $part1 = substr($filename, 0, $MAXPATHLEN - 13); # first 242 chars
my $part2 = crypt(0, substr($filename, $MAXPATHLEN - 13)); # 13 chars hash
$filename = $part1.$part2;
}
$filename =~ s!/!_!g; # escape directory separator
它可靠吗?如何改进?