On Mon, May 21, 2007 at 19:46:59 +0200, Frank Lichtenheld wrote: > This option will enclose key names in quotes (") if they > contain a subsection and then escape " and \. It will also > escape line breaks in values. Together this should produce > an easily parsable output. That will lead to either eval (which runs perl parser and probably won't win anything) or regexps (which is not big win over parsing the .ini directly with them) on the perl side. IMHO only thing that would actually be faster is NUL-separated entries. Either: KEY <NUL> VALUE <NUL> or: KEY <TAB> VALUE <NUL> I am not sure whether there can be multi-valued entries. If so, than there are three options: 1. Simply repeated key/value pairs: KEY <NUL> VALUE1 <NUL> KEY <NUL> VALUE2 <NUL>. KEY <TAB> VALUE1 <NUL> KEY <TAB> VALUE2 <NUL> resp. 2. Key/count/values: KEY <NUL> 1 <NUL> VALUE <NUL> KEY <NUL> 2 <NUL> VALUE1 <NUL> VALUE2 <NUL> (there's probably no benefit for the tab-nul format, because the first value must be terminated with NUL) 3. Empty-entry terminated: KEY <NUL> VALUE <NUL> <NUL> KEY <NUL> VALUE1 <NUL> VALUE2 <NUL> <NUL> (again no point in terminating the KEY with tab) The advantage of such format is, that it can be parsed with: local $/ = "\0"; while(<INPUT>) { $hash{$_} = <INPUT>; } and slight variations for the other variants. It should be similarly easy from python and C. Shell won't like it, though. Note: In both bash and zsh, read -d '' line reads NUL-terminated "lines". However, dash does not have -d option to read :-(. -- Jan 'Bulb' Hudec <bulb@xxxxxx>
Attachment:
signature.asc
Description: Digital signature