Zu 1.)
Durch
local $/ ist der Trenner
undef, wodurch die ganze Datei auf einmal eingelesen wird. Dadurch muss ich mich nicht durch das Array durcharbeiten.
Mehr zu $/ findest Du hier:
perldoc perlvar
http://reneeb-perlblog.blogspot.com/2007/10/ntzlic...
Zu 2.) Bei s/// kann man beliebige Trenner nehmen. Ich habe mir irgendwann angewöhnt, Ausrufezeichen zu nehmen. Du kannst es auch durch
s/paragraph\{(.*?)\}/$1/sg; ersetzen. Die Zeichen, die durch das
(.*?) gespeichert wurden, stehen hier in
$1 (mehr zu
$<number> in perldoc perlvar). Da ich "paragraph{<beliebige Zeichen>}" durch "<beliebige Zeichen>" ersetze, ist das "paragraph{" und das "}" weg.
s und g sind modifier des Regulären Ausdrucks. "s" bedeutet "single line". Dadurch matcht "." auch auf Newlines.
Vergleiche:
"test\n123" =~ /test.123/ and print "matched";
"test\n123" =~ /test.123/s and print "matched (2)";
"g" bedeutet "global matching". Dadurch werden "alle" Vorkommen ersetzt. Ohne das "g" würde nur das erste Vorkommen ersetzt werden.
Vergleiche:
my $var = "test\n123";
$var =~ s!t!!;
print $var,"\n";
$var = "test\n123";
$var =~ s!t!!g;
print $var,"\n";
Siehe auch
http://perldoc.perl.org/perlre.html#Modifiers