Ich habe ein Problem, dass ich eine Zeile in einer Datei nicht mit einem per Post übergebenen Parameter mittels Regular Expressions vergleichen kann.
Mein Code sieht ungefähr so aus (Die print Anweisungen dienen nur Testzwecken):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
elsif ($button eq "Eintrag löschen") {
# Dateien mit der entsprechenden ID heraussuchen
my @files;
find sub {my $file="$File::Find::name"; push @files, $file if $file =~ m/\.plog/;}, "$datadir/blog";
chomp @files;
print "FILES: @files \n";
# Aus den Dateinamen eine Liste erstellen
my @items;
foreach my $file (@files) {
# in der ersten Zeite steht der Name/die ID
open my $fh, "<:encoding(utf-8)", "$file";
while (my $line = <$fh>) {
chomp $line;
if ($line eq "%%%ID") {
# erst die zweite Zeile enthält den Namen, die erste wird daher ohne Speichern verworfen
$line = <$fh>;
chomp $line;
print "LINE: $line \n";
# wichtig ist das $ am Ende der Regular Expression, da ja bei
# Namensgleichheit von anderen Beiträgen
# _1 usw. angehängt werden, und diese sonst unbeabsichtigt auch gelöscht würden
#(es geht ja um die url taugliche ID,
# die immer am Ende der Zeile ist!
my $item = body_parameters->get("item");
print "ID: $item \n";
if ( $line =~ /$item$/) {
print "MATCH \n";
push(@items, $file);
last;
}
next;
}
}
close $fh;
}
print "ITEMS: @items \n";
#unlink @items;
redirect uri_for("/admin/blog");
}
wenn ich statt
my $item = body_parameters->get("item"); den zu suchenden Text übergebe, also bspw.
my $item = "Dies-ist-die-ID"; klappt es ohne Probleme?
Hat jemand eine Idee, woran das liegen könnte?
Im Voraus herzlichen Dank