Category: | Miscellaneous |
Author/Contact Info | tadman |
Description: | A simple function to distribute many files across as many directories, using an RC5 hash. |
#!/usr/bin/perl -w
use strict;
# hashed - Create a hashed directory path for a given filename
# using an RC5-hash generated by the crypt() function.
sub hashed
{
my ($name) = @_;
# Send the input into the grinder until it comes out the
# right size. It shrinks blocks of up to 12 characters
# into only two with each pass.
while (length($name) > 4)
{
my $crypt;
foreach ($name =~ /.{1,12}/gs)
{
$crypt .= substr(crypt($_,'$1$ABCDEFGH'),12,2)
+;
}
$name = $crypt;
}
# Fix unruly characters, as crypt will gleefully return
# '/' in the hashed strings. These are converted to 'Z'
$name =~ y!/!Z!;
# Split the returned string into a full path, including
# the specified filename.
return join ('/', ($name =~ /../g), $_[0]);
}
print hashed ("thisimage.gif"),"\n";
print hashed ("thisimage.jpg"),"\n";
print hashed ("thisimage1.gif"),"\n";
print hashed ("thisimage2.gif"),"\n";
|
Back to
Code Catacombs