package Iotta::Copp::Parse::Meth; use strict; require Iotta::Elem; our @ISA = ("Iotta::Elem"); my $ws = "[ \t\n]"; sub run { my $self = shift; my $meta = shift; my $data = shift; $_ = $data; my $meth; my @meths; while (s/CO_METH$ws*\((.*?),(.*?)(?:,(.*?)|)\)//sm) { my %_meth; $meth = \%_meth; my $o = $1; my $m = $2; my $argl = $3; $o =~ s/^$ws+|$ws+$//g; $m =~ s/^$ws+|$ws+$//g; $argl =~ s/^$ws+|$ws+$//g; $$meth{object} = $o; $$meth{name} = $m; $$meth{args} = []; my @arg = split /[ \t\n]*,[ \t\n]*/, $argl; for (@arg) { #/^(.+?)[ \t\n]+([^ \t\n]+$)/; /^(.+)(\b[a-zA-Z_][^ \t\n]*$)/; my $a = "$1:$2"; push @{$$meth{args}}, $a; } push @meths, $meth; } push @{$$meta{meths}}, @meths; $self->next->run ($meta, $data) if ($self->next); } 1;