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