beim zwei-parametrigen open ist immer das Problem, dass man damit auch externe Kommandos ausfuehren kann, z.B.
my $command = "ls -la";
open( my $CMD, "$command |" ) or die $!;
my @lines = <$CMD>;
close $CMD;
wenn man zum lesen einer Datei folgendes verwendet:
open( my $FH, $filename ) or die $!;
my @content = <$FH>;
close $FH;
und $filename kann von einem Benutzer angegeben werden, kann dies auch folgenden Inhalt haben:
durch voranstellen eines < kann man das entschaerfen, aber das wird oft vergessen.
open( my $FH, "<$filename" ) or die $!;
Beim drei-argumentigen open ist es IMHO schwieriger, das < oder > zu vergessen, d.h. externe Kommandos koennen nicht so einfach ausgefuehrt werden.
@betterworld: gefaehrliche sachen herauszufiltern halte ich i.d.R. fuer keine gute Loesung, weil man da leicht was potentiell gefaehrliches zu entfernen vergisst. besser definieren, welche Zeichen gueltig sind und dann ueberpruefen, ob auch nur die vorkommen.