diff options
Diffstat (limited to 'dcopperl/DCOP')
-rw-r--r-- | dcopperl/DCOP/Object.pm | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/dcopperl/DCOP/Object.pm b/dcopperl/DCOP/Object.pm new file mode 100644 index 00000000..e98f65b5 --- /dev/null +++ b/dcopperl/DCOP/Object.pm @@ -0,0 +1,41 @@ +package DCOP::Object; + +use strict; +use vars qw($VERSION $AUTOLOAD); + +$VERSION = '0.01'; + +sub AUTOLOAD() +{ + my $funcname; + ($funcname = $AUTOLOAD) =~ s/.*:://; + return if $funcname eq 'DESTROY'; + my $self = shift; + foreach my $func (map {DCOP::canonicalizeSignature $_} + @{DCOP::remoteFunctions($self->{CLIENT}, $self->{APP}, $self->{OBJ})}) + { + my $argstr = $func; + $argstr =~ s/.*\((.*)\)/$1/; + my @args = split /,/, $argstr; + next unless $func =~ /^$funcname\(/ && scalar(@args) == scalar(@_); + unshift @_, $self->{CLIENT}, $self->{APP}, $self->{OBJ}, "$func"; + defined wantarray ? goto &DCOP::call : goto &DCOP::send; + } + die 'Function "', $self->{APP}, '.', $self->{OBJ}, ".$funcname()\" doesn't exist."; +} + +sub _app() +{ + my $self = shift; + $self->{APP}; +} + +sub _object() +{ + my $self = shift; + $self->{OBJ}; +} + +1; +__END__ + |