my @pass_char = ('a'..'z', 'A'..'Z', 0 .. 9, qw(_ . @)); sub generate_password { return join '', map $pass_char[rand @pass_char], 1 .. (shift || 12); }