#!/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";