Dear list,
I am a beginner with Perl and seek wisdom of the monks
What i want is to read a file, run a regex on its lines and when matching substitute some strings according to a map.
Mostly that does work but on a specific line, i cannot get my regex to match and I like to understand why
This is an excerpt of one of the files that should be processed
"user.name@domain.com:Calendar/personal" = <*I0>;
};
SubscribedFolders = (
"user@domain.com:Calendar/BCA-513DD600-1B-6967B200"
);
FoldersOrder = (
personal,
"user_A_domain_D_com_BCA-513DD600-1B-6967B200",
"7D03-5682B480-975-5FFE8000",
"7D03-5682B480-977-5FFE8000"
);
FreeBusyExclusions = {
"user.name@domain.com:Calendar/personal" = <*I0>;
"user@domain.com:Calendar/BCA-513DD600-1B-6967B200" = <*I1>;
And this is my Code
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
my %replacements = (
'user.name@domain.com' => 'uname',
'user@domain.com' => 'user',
);
open( my $readFile, '<', "sampleFile" );
while ( <$readFile> ) {
# if contains :Calendar and is suffixed with /
# or :Contacts with same suffix or Users prefixed
# with / or is an email-address followed by " =
if ( m/:Calendar(?=\/)/,
m/:Contacts(?=\/)/,
m/(?<=\"\/)Users/,
m/.+@.+\"\s=/) {
# then replace every occurrence as in list
foreach my $key ( sort keys %replacements ) {
s/\b$key\b/$replacements{$key}/g;
}
}
print $_;
}
And this is the result
"uname:Calendar/personal" = <*I0>;
};
SubscribedFolders = (
"user@domain.com:Calendar/BCA-513DD600-1B-6967B200"
);
FoldersOrder = (
personal,
"user_A_domain_D_com_BCA-513DD600-1B-6967B200",
"7D03-5682B480-975-5FFE8000",
"7D03-5682B480-977-5FFE8000"
);
FreeBusyExclusions = {
"uname:Calendar/personal" = <*I0>;
"user:Calendar/BCA-513DD600-1B-6967B200" = <*I1>;
I do not understand why my regex does not match the string under "Subscribed Folders"
any help is greatly appreciated
cheers,
Sascha