- my $sig;
- if (defined $opts{sig}) {
- $sig = int $opts{sig};
- $sig += SIG_MIN if $sig < SIG_MIN;
- $sig %= SIG_MAX + 1 if $sig > SIG_MAX;
- } else {
- $sig = gensig();
- }
- return _wizard($sig, map { $opts{$_} } qw/get set len clear free data/);
+ my $sig = $opts{sig};
+ my @types = qw/data get set len clear free/;
+ push @types, 'copy' if MGf_COPY;
+ push @types, 'dup' if MGf_DUP;
+ delete $opts{dup}; # don't use it for now
+ push @types, 'local' if MGf_LOCAL;
+ return _wizard($sig, map { $opts{$_} } @types);