ググってみると String::Random モジュールを使うといいらしいんだけど、うまくインストールできなかったので(原因不明)、もっとベタな方法でやることにした。
use strict; use warnings; sub randstr { my $length = shift(@_); my @chars; push(@chars, ('A'..'Z')); push(@chars, ('a'..'z')); push(@chars, ('0'..'9')); my $rand_str = ''; for (my $i = 1; $i <= $length; $i++) { $rand_str .= $chars[int(rand($#chars+1))]; } return $rand_str; } my $length = shift(@ARGV); print randstr($length);
$#chars
という表現は、配列 @chars の最後のインデックスを取得している。こんな書き方があるとは初めて知った。
実行結果:
^o^ > random_string.pl 20 LxN8r4RSM8rdZ4iQdp3r