I'm a little nervous to comment... I hope this won't offend anyone...
IMVHO I think the clearest code is
rminner's
code.
IMVVHO The 2nd clearest is ... oh look over there, a spider ... *whispers* the original code.
IMVVVHO Both make it very clear what the 2 different cases are, and what to do for each of them.
I like to line things up to help highlight the similarities and differences, so I might write it like this:
sub id2path_new {
my ($id) = @_;
return '' unless $id;
my $path = '';
if ($id >= 1_000_000) { $path = sprintf("%09d", $id); $path =~ s
+#\A(.*)(...)(...)\z#$1/$2/$3#; }
else { $path = sprintf("%06d", $id); $path =~ s
+#\A(..) (..) (..)\z#$1/$2/$3#x; }
return $path;
}