#!/usr/bin/perl

use strict;

my (@ch_all,@ch_alnum);
my ($num,$r);

if($ARGV[0] eq ""){
  $ARGV[0] = 8;
}elsif($ARGV[0] !~ /^[0-9]+$/){ print "usage : mkpasswd NUM\n"; exit; }

## 
## a-z A-Z 0-9 !"#$%&'()=~|`{+*}<>?_-^\@[;:]\/.,

@ch_all = ('1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'0' ,'q' ,'w' ,'e' ,'r' ,'t' ,'y' ,'u' ,'i' ,'o' ,'p' ,'a' ,'s' ,'d' ,'f' ,'g' ,'h' ,'j' ,'k' ,'l' ,';' ,':' ,']' ,'z' ,'x' ,'c' ,'v' ,'b' ,'n' ,'m' ,'Q' ,'W' ,'E' ,'R' ,'T' ,'Y' ,'U' ,'I' ,'O' ,'P' ,'A' ,'S' ,'D' ,'F' ,'G' ,'H' ,'J' ,'K' ,'L' ,'Z' ,'X' ,'C' ,'V' ,'B' ,'N' ,'M' ,'+' ,'*' ,'}' ,'-' ,'^' ,'\\' ,'@' ,'[' ,',' ,'.' ,'/' ,'!' ,'"' ,'#' ,'$' ,'%' ,'&' ,'\'' ,'(' ,')' ,'=' ,'~' ,'|' ,'`' ,'{' ,'<' ,'>' ,'?' ,'_');

@ch_alnum = ('1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'0' ,'q' ,'w' ,'e' ,'r' ,'t' ,'y' ,'u' ,'i' ,'o' ,'p' ,'a' ,'s' ,'d' ,'f' ,'g' ,'h' ,'j' ,'k' ,'l' ,'z' ,'x' ,'c' ,'v' ,'b' ,'n' ,'m' ,'Q' ,'W' ,'E' ,'R' ,'T' ,'Y' ,'U' ,'I' ,'O' ,'P' ,'A' ,'S' ,'D' ,'F' ,'G' ,'H' ,'J' ,'K' ,'L' ,'Z' ,'X' ,'C' ,'V' ,'B' ,'N' ,'M' );

for($num=0;$num<$ARGV[0];$num++){
  if($ARGV[1] eq "alnum"){
    $r = int((rand) * (62));
    print "$ch_alnum[$r]";
  }else{
    $r = int((rand) * (94));
    print "$ch_all[$r]";
  }
}

if($ARGV[2] ne "file"){
  print "\n";
}

exit;
