in reply to Unwrapping values in a template

Here is a brute force approach (multiple regexs):

#! perl -w use Data::Dumper; open(TMPL, "<my.template") or die $!; my $tmpl = 0; my $last; my %hash; for (<TMPL>) { next if /^#/; if (m!<template>!) { $tmpl = 1; next; } elsif (m!</template>!) { if (%hash) { $Data::Dumper::Sortkeys = 1; print "Result: ", Dumper(\%hash); } else { print "Bad template: $tmpl\n"; } } elsif ($tmpl) { if(/^\s+(\w+)\s*=\s*$/) { $hash{$1} = ''; $last = $1; } elsif(/^\s+(\w+)\s*=\s*(\S+)\s*$/) { if ($2 or $2 == 0) { $hash{$1} = $2; } } elsif (/^\s*(\S+[^=])\s*$/) { $hash{$last} = $1; } } } close TMPL;

Not too elegant but it is fairly clear and works. Needs more code to handle all edge cases though.