我正在用 Dancer 编写一个非常小的 URL 缩短器。它使用 REST 插件将发布的 URL 存储在数据库中,其中包含六个字符串,用户使用该字符串来访问缩短的 URL。
现在我有点不确定我的随机字符串生成方法。
sub generate_random_string{
my $length_of_randomstring = shift; # the length of
# the random string to generate
my @chars=('a'..'z','A'..'Z','0'..'9','_');
my $random_string;
for(1..$length_of_randomstring){
# rand @chars will generate a random
# number between 0 and scalar @chars
$random_string.=$chars[rand @chars];
}
# Start over if the string is already in the Database
generate_random_string(6) if database->quick_select('urls', { shortcut => $random_string });
return $random_string;
}
如果生成的字符串已经在数据库中,这会生成一个六个字符的字符串并递归调用该函数。我知道有 63^6 个可能的字符串,但如果数据库收集更多条目,这将需要一些时间。也许它会变成一个几乎无限的递归,我想阻止它。
有没有办法生成唯一的随机字符串,防止递归?
提前致谢