It understands files such as: ```yaml ## global definitions global: debug: yes verbose: no debugging: detailed: no header: "debugging started" ## output output: file: "yes" ``` Which, when parsed using: ```bash parse_yaml sample.yml ``` will output: ```yaml global_debug="yes" global_verbose="no" global_debugging_detailed="no" global_debugging_header="debugging started" output_file="yes" ``` it also understands yaml files, generated by ruby which may include ruby symbols, like: ```yaml --- :global: :debug: 'yes' :verbose: 'no' :debugging: :detailed: 'no' :header: debugging started :output: 'yes' ``` and will output the same as in the previous example. typical use within a script is: ```yaml eval $(parse_yaml sample.yml) ``` parse_yaml accepts a prefix argument so that imported settings all have a common prefix (which will reduce the risk of namespace collisions). ```bash parse_yaml sample.yml "CONF_" ``` yields: CONF_global_debug="yes" CONF_global_verbose="no" CONF_global_debugging_detailed="no" CONF_global_debugging_header="debugging started" CONF_output_file="yes" Note that previous settings in a file can be referred to by later settings: ```yaml ## global definitions global: debug: yes verbose: no debugging: detailed: no header: "debugging started" ## output output: debug: $global_debug ``` Another nice usage is to first parse a defaults file and then the user settings, which works since the latter settings overrides the first ones: ```bash eval $(parse_yaml defaults.yml) eval $(parse_yaml project.yml) ```