::= NUMBER ('.') NUMBER ('.') NUMBER ('.') NUMBER action => joindot ::= NAMECH+ separator => DOT action => joindot ::= action => add_ip | action => add_host ... # There should be a semicolon, not a comma. # | # v sub joindot { shift; join '.', @_ } sub AUTOLOAD { die 'Invalid action' unless $::AUTOLOAD =~ /^add_(ip|host)$/; {type => $1, $1 => $_[1]} }