sub serialize_string_list { return join('|', map { (defined($_) ? do { local $_=$_; s/\^/^1/g; s/\|/^2/g; $_ } : '^0' ) } @_ ); } sub deserialize_string_list { return map { ($_ eq '^0' ? undef : do { local $_=$_; s/\^1/^/g; s/\^2/|/g; $_ } ) } split(/\|/, $_[0]); } $s = serialize_string_list(%test_hash); %test_hash = deserialize_string_list($s);