while ( <> ) { chomp; s/!;/\x001/g; s/;/\x000/g; s/\x001/;/g; s/!!/!/g; @a = split /\x000/; print '{' . (join '}{', @a) . "}\n"; } __END__ foo;bar;baz fred!;flintstone;barney!!rubble eggs!;spam!;toast!;spam;bacon!!;eggs!;spam!!toast!;spam;spamspam!!eggs!!;spam #### {foo}{bar}{baz} {fred;flintstone}{barney!rubble} {eggs;spam;toast;spam}{bacon!;eggs;spam!toast;spam}{spamspam!eggs!;spam}