Another thing you can do is break your larger regexes into parts to make them more readable/maintainable. It also helps to use the x flag so that you can separate the individual tokens and comment them.
#!/usr/bin/perl use strict; use warnings; use Regexp::Common; #FIXME: the border value should be (foo|bar|baz) where foo, #bar, and baz are the valid values for a border my $border = qr{ # match a border value border: #constant indicating this is a border value \s* #optional spaces (.*) #the border value }xi; my $num = qr{ #match a number of feet or inches ($RE{num}{real}) #a real number (['"]|'') #unit indicator ' is foot, " or '' is inches }x; my $dim = qr{ #match a dimension $num #height value \s* #optional spaces (?:x|by) #x or by, don't capture \s* #optional spaces $num #width value }xi; my $size = qr{ #match a size value size: #constant indication this is a size value \s* #optional spaces $dim #the dimensions }xi; my $tag = qr{ #match a tag value tag: #constant indication this is a tag value \s* #optional spaces (.*) #the tag }xi; my $match=qr{ #match the whole record for a widget ^ #start of the record $border #a border value \s* #optional spaces $size #a size value \s* #optional spaces $tag #a tag value $ #optional spaces }x; while(<>) { chomp; if (/$border\s*$size\s*$tag/) { my ($border, $h, $h_type, $w, $w_type, $tag) = ($1, $2, $3, $4, $5, $6); print "Border is $border\n", "Height is ", ($h_type !~ /"|''/ ? $h*12 : $h), " inches\n", "Width is ", ($w_type !~ /"|''/ ? $w*12 : $w), " inches\n", "Tag is $tag\n"; } else { print "invalid entry\n"; } } -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>