Ich bin eigentlich immer davon ausgegangen, dass:
use strict
allein schon verhindert dass Eingaben nicht nachträglich interpretiert werden
Wer hat dir denn diesen Floh ins Ohr gesetzt? :)
strict macht folgendes: http://perldoc.com/perl5.8.4/lib/strict.html
Wie meine ich das
ohne use strict
Sinput = "wort1|wort2" ;
$finde =~ /$input/;
findet "wort1" oder "wort2"mit use strict
Sinput = "wort1|wort2" ;
$finde =~ /$input/;
findet "wort1|wort2" , maskiert also die Pipe in der Eingabe
Das ist Murks. Ich habe mal einen Testcase gebaut:
use strict;
my $muster = 'wort1|wort2';
my $vergleich1 = 'abcwort1xyz';
my $vergleich2 = 'abcwort2xyz';
my $vergleich3 = 'abcwort1|wort2xyz';
print "true1\n" if $vergleich1 =~ /$muster/; # ist wahr
print "true2\n" if $vergleich2 =~ /$muster/; # ist auch wahr
print "true3\n" if $vergleich3 =~ /$muster/; # dito
Dieser verhält sich mit oder ohne strict identisch. Ich glaube, was du suchst, ist quotemeta.
use strict;
my $muster = 'Guten Tag.';
my $vergleich1 = 'abcGuten Tag0xyz';
my $vergleich2 = 'abcGuten Tag.xyz';
print "true1\n" if $vergleich1 =~ /$muster/; # ist wahr
print "true2\n" if $vergleich2 =~ /$muster/; # ist auch wahr
my $musterquoted = quotemeta $muster;
print "true1\n" if $vergleich1 =~ /$musterquoted/; # ist falsch!
print "true2\n" if $vergleich2 =~ /$musterquoted/; # wahr
print "true1\n" if $vergleich1 =~ /\Q$muster\E/; # ist falsch!
print "true2\n" if $vergleich2 =~ /\Q$muster\E/; # wahr
Erläuterung: Im ersten Abschnitt trifft die Übereinstimmung auf beide Strings zu, denn der Punkt am Ende wird als reguläres Zeichen gewertet. Im zweiten und dritten Abschnitt trifft die Übereinstimmung nur noch auf String 2 zu, denn der Punkt wird als literales Zeichen, d.h. als tatsächlicher Punkt, gewertet. Quotemeta tut Backslashes vor reguläre Zeichen und raubt ihnen damit ihren Sonderstatus.