Mac-Glue
view release on metacpan or search on metacpan
push @$OTHERCLASS, $db{CLASS} if $db{CLASS};
push @$OTHERENUM, $db{ENUM} if $db{ENUM};
}
}
chdir $curdir or confess "Can't chdir to '$curdir': $!";
}
#=============================================================================#
# merge additions, dialect, and glue classes together
# wow, this is ugly. i wonder if there is a better/faster way. probably.
# or maybe a way to cache the results between iterations ... ?
# but then, how do we deal with added/removed classes?
sub _merge_classes {
my($db) = @_;
if (!exists $MERGEDCLASSES->{ $db->{ID} }) {
my($ids, $names) = ({}, {});
my($class, @classes) = ($db->{CLASS}, @$OTHERCLASS);
for my $c (keys %$class) {
$names->{$c}{id} = $class->{$c}{id};
natural.
There are downsides. Mac::Glue is less powerful than the
Mac::AppleEvents raw interfaces, because it offers less flexibility
in how events are called. It is also slower to start a script,
because the glue structures need to be loaded in. However, once a
script has started, a difference in speed from the raw interfaces should
be minimal (though not a lot of testing has been done on that). With the
code above, on a PowerBook G3/292, running Mac OS 8.6:
Benchmark: timing 100 iterations of glue, glue2, raw, simple...
glue: 10 secs ( 9.98 usr 0.00 sys = 9.98 cpu)
glue2: 8 secs ( 8.35 usr 0.00 sys = 8.35 cpu)
raw: 8 secs ( 7.88 usr 0.00 sys = 7.88 cpu)
simple: 7 secs ( 7.50 usr 0.00 sys = 7.50 cpu)
The "glue2" entry is the same as "glue" entry, but it creates a glue
object only once instead of each time through, cutting down on the
overhead. It appears that Mac::Glue is a bit slower than the other
methods, but not substantially, and it is cooler and easier.
The one place where performance is the biggest problem is on
( run in 0.307 second using v1.01-cache-2.11-cpan-5511b514fd6 )