Hallo,
ich habe gerade ein kleines aber relativ wichtiges PErl Problem.
Kurze Erklärung der Rahmenbedingungen:
Es gibt einen Outlook Kalender, der mir als ics zur Verfügung gestellt wird.
Die Ortsangaben in den Terminen Sollen bestimmte Heizungsaktoren triggern. Weil die Raumbezeichnungen sehr chaotische sind möchte ich die ics Datei vorher parsen und die chaotischen Begriffe in für mich nutzbare Begriffe ersetzen.
Beispiel der Ausgangsdatei:
LOCATION:Kaffeebar\; Saal
Mein Percode:
#!/usr/bin/perl
use strict; use warnings; use autodie;
my %repl = (
"Kaffeebar" => "Raum_Kaffeebar",
"Saal" => "Raum_Saal",
'\; ' => ';',
);
system ("wget -O /home/cgw/calendarconversion/reachcalendar.ics https://EINEURL/reachcalendar.ics");
open( my $F, '<', "/home/cgw/calendarconversion/reachcalendar.ics" );
open( my $OUTPUT, '>', "/home/cgw/calendarconversion/convertedcalendar.ics" );
while ( <$F> ) {
foreach my $key ( sort keys %repl ) {
s/$key/$repl{$key}/g;
#s/\b$key\b/$repl{$key}/g;
}
print $OUTPUT $_;
}
close( $F );
close( $OUTPUT );
Das Ergebnis ist:
LOCATION:Raum_Kaffeebar\;Raum_Saal
Warum zum Geier ist da noch der BACKSLASH? Ich habe doch single quotes benutzt. Und warum wird der Rest des hashes trotzdem getauscht? %-)
Habe einen workarround gefunden, finde das aber trotzdem komisch....
Der backslash muss maskiert werden: http://perldoc.perl.org/perlre.html#Quoting-metacharacters