#!/usr/bin/env perl use strict; use warnings; my $indent = ' ' x 4; my $web_page = [ [ html => { attr => { lang => 'en' }, content => [ [ head => { content => [ [ title => { content => 'Some Title', }, ], ], }, ], [ body => { attr => { id => 'top' }, content => [ [ header => { }, ], [ article => { }, ], [ footer => { }, ], ], }, ], ], }, ], ]; markup($web_page); sub markup { my ($element_array, $depth) = @_; $depth ||= 0; for my $element (@$element_array) { my ($tag, $data) = @$element; print $indent x $depth, "<$tag"; if (exists $data->{attr}) { for my $key (keys %{$data->{attr}}) { print " $key=\"$data->{attr}{$key}\""; } } if (exists $data->{content}) { print ">\n"; if (ref $data->{content}) { markup($data->{content}, $depth + 1); } else { print $indent x ($depth + 1), "$data->{content}\n"; } print $indent x $depth, "\n"; } else { print " />\n"; } } return; } #### $ pm_la_html.pl Some Title