Hey,
den Speicherzugriffsfehler erhältst du, weil du tatsächlich alles in ein $_
einzulesen versuchst. Siehe http://perldoc.perl.org/perlrun.html#*-p*--p, das -p wird zu einem while
mit <>
expandiert. Bekanntlich ist <>
nur die Kurzform für $_ = readline(*STDIN);
.
Schau dir mal den Schalter -0 an. Gib ihm den oktalen Wert für ), nämlich 051. Jetzt wird ) als Zeilenende interpretiert. Wenn dann am Zeilenanfang ; und Leerzeichen steht, ersetze es mit ; und \n.
perl -0051 -pe's/^; /;\n/' dummy
Diese Lösung über chunkweises Einlesen wird nochmals schneller sein als die vorher gepostete über zeichenweises Einlesen.
--
水-金-地-火-木-土-天-海-冥
水-金-地-火-木-土-天-海-冥