use strict;
use warnings;

# -------- Konfiguration ---------------------------------
# Pfad zum Woerterbuch
# my $dict = '/etc/dictionaries-common/words';
my $dict = 'words';

# Laenge des Passworts
my $wordlen = 8;

# Laenge eines Teilstuecks des Passworts
my $sublen = 3; 
# -------- Konfiguration ---------------------------------

die "Wortlänge zu kurz (min. $sublen)\n" if ($wordlen < $sublen);
die "Usage: $0 Anzahl ...\n" unless (@ARGV);

# Anzahl auszugebender Passwoerter
my $numwords = $ARGV[0]; 

# fuer Zufalls-substr() unten
my $ceiling = 10**($wordlen - 1);


# Woerterbuch einlesen
open (DICT, "<$dict") || die ("Cannot open dict: $!");
my @dict = <DICT>;
close(DICT);

# Zufallstexht aus dem Woerterbuch basteln
for my $j (1 .. $numwords) 
  {
  my @sub = ();
  my $word = '';
  my $parts = int($wordlen/$sublen);

  for my $i (0 .. $parts-1) 
    {
	  do 
	    { $sub[$i] = substr ($dict[int(rand @dict)], 0, $sublen); }
	  while (length($sub[$i]) != $sublen);
	  $word .= lc($sub[$i]);
    }

  # Zufallszahl anhängen
  my $left = $wordlen % $sublen;
  $word .= substr(int(rand($ceiling)), 0, $left);

  # ggf. Umlaute entfernen
	$word =~ s/ü/u/g;
	$word =~ s/ö/o/g;
	$word =~ s/ä/a/g;
	$word =~ s/ß/s/g;
	
  print "$word\n";
  }
