FHEM Forum

FHEM => Sonstiges => Thema gestartet von: zweiundzwanzig am 06 November 2016, 15:18:43

Titel: Kleiner Perl Notfall
Beitrag von: zweiundzwanzig am 06 November 2016, 15:18:43
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? %-)
Titel: Antw:Kleiner Perl Notfall
Beitrag von: zweiundzwanzig am 07 November 2016, 19:43:21
Habe einen workarround gefunden, finde das aber trotzdem komisch....
Titel: Antw:Kleiner Perl Notfall
Beitrag von: dev0 am 08 November 2016, 15:00:26
Der backslash muss maskiert werden: http://perldoc.perl.org/perlre.html#Quoting-metacharacters