Please don't use regexes to parse XML.
#!/usr/bin/env perl use warnings; use strict; use XML::LibXML; my $doc = XML::LibXML->load_xml( location => 'in.xml' ); my (@data, %maxlen); for my $food ( $doc->findnodes('/breakfast_menu/food') ) { my %elem; for my $t ( qw/ name price / ) { # assume only one of these elements each per <food> my ($str) = $food->getElementsByTagName($t); $str = $str->textContent; $str =~ s/^\s*\$// if $t eq 'price'; if ( !defined $maxlen{$t} || length $str > $maxlen{$t} ) { $maxlen{$t} = length $str } $elem{$t} = $str; } push @data, \%elem; } @data = sort { $a->{name} cmp $b->{name} } @data; for my $elem (@data) { printf "%-$maxlen{name}s %$maxlen{price}.2f\n", $elem->{name}, $elem->{price}; } __END__ Belgian Waffles 5.95 Berry-Berry Belgian Waffles 8.95 French Toast 4.50 Homestyle Breakfast 6.95 Strawberry Belgian Waffles 7.95
In reply to Re: aligning text
by haukex
in thread aligning text
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |