use strict;
use warnings;
use TeX::Hyphen;
# aus dem Paket wird hier nur hyphenate() verwendet.

# Das Programm arbeitet als Filter

# ---------- Beginn Konfiguration -----------------------
# diese Zeichenkette repräsentiert die Silbentrennung
# Fuer HTML ist '&shy;' eine gute Wahl
my $trenn = '=';

# Ausnahmeliste
my %special = (
  'genutzt' => 'ge=nutzt',
  );

# ---------- Ende Konfiguration -------------------------

# Laenge des Trennstrings
my $tlen = length($trenn);
# Hilfsvariablen
my (@worte, $wort, $pos, $offset);

# Erzeugen eines neuen Objekts
# mit der aktuellen Tabelle
my $hyp = new TeX::Hyphen
              style => 'german',
              file => 'dehyphn-x-2009-06-19.pat';

# mit der Standard-Tabelle:
# my $hyp = new TeX::Hyphen
#              style => 'german';

while(<>)
  {
  # Einfacher Ansatz, um Wörter zu unterscheiden
  my @worte = split /\s+/, $_;

  for $wort(@worte)
    {
    $offset = 0;
    # $wort teilen in das eigentliche Wort 
    # und ggf. folgende Satzzeichen
    $wort =~ m/(\w+)(.*)/;
    # Ist das Wort in der Ausnahmeliste?
    if (defined $special{$1})
      { $wort = $special{$1} . $2; }
    else
      {
      for my $pos ($hyp->hyphenate($wort))
        {
        substr($wort, $pos + $offset, 0, $trenn);
        $offset += $tlen;
        }
      }
    # Füge einen Worttrenner an:
    print $wort, " ";
    }
  print "\n";
  }