Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exclude functions from importing #11

Open
berekuk opened this issue Jun 11, 2012 · 5 comments
Open

Exclude functions from importing #11

berekuk opened this issue Jun 11, 2012 · 5 comments
Labels

Comments

@berekuk
Copy link

berekuk commented Jun 11, 2012

It would be nice to have a syntax for importing "all functions except one".
Exporter.pm does this with '!' syntax, but unfortunately it's already taken by autodie::hints.
How about '-'?
So, use autodie qw(:all -read) would import everything except read.

This effect is hard to achieve by other means, see https://gist.github.com/2901998 for my attempts to avoid prototype conflicts with a method named read.

@pjf
Copy link
Collaborator

pjf commented Jun 13, 2012

I'm currently at YAPC, but just as a quick check, does the following work for you?

use autodie;
no autodie qw(read);

@berekuk
Copy link
Author

berekuk commented Jun 13, 2012

No, it removes my method for some reason:

mmcleric@domU-12-31-39-0A-60-DD:~$ cat X.pm
package X;

use strict;
use warnings;

use autodie;
no autodie qw(read);

sub read {
    print "foo\n";
}

1;
mmcleric@domU-12-31-39-0A-60-DD:~$ perl -e 'use X; X->read'
Can't locate object method "read" via package "X" at -e line 1.

@mla
Copy link
Contributor

mla commented Apr 10, 2014

I hit this as well (have a module with a connect() method that is getting clobbered).
I'd like what berekuk suggested would be great.

use autodie qw/ :all -connect /;

@pjf
Copy link
Collaborator

pjf commented Apr 10, 2014

Oh, dang.

I agree, autodie qw/ :all -connect /; would be great.

In the tradition of short responses, I'm on the way to KiwiFoo right now, but nudging me in 6-7 days time should reach me in a quiet spot. Alternatively, if you fancy a patch to Fatal::_translate_import_args, I'd be delighted to receive it (especially if it comes with test cases)!

~ pjf

@mla
Copy link
Contributor

mla commented Apr 11, 2014

I did a bit more poking around and I see what's happening. autodie is doing its work before the user-supplied method is defined which is why unimport is failing. Here's an ugly work-around:

#!/usr/bin/env perl

package Foo;

use strict;
use warnings;

INIT {
  require autodie;
  autodie->import(':all');
  autodie->unimport('connect');
}

sub connect {
  warn "MY CONNECT!\n";
  return;
}

Foo->connect;

With that, we're delaying the autodie setup until after the rest of the code has been defined, which allows unimport to work as expected.

I'll look at putting together a patch for the -connect syntax. There's no way to have autodie automatically delay it's execution until the current file is compiled, is there?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants