in reply to eval "use $module" doesn't

Hmmmmmm. I found a workaround:
package Bar warn "blaah"; sub bar { } use interface Foo; 1
works as advertised.

Further more, what interface is doing is essentially:

package Bar; sub BEGIN { eval "use Bar" if $loaded_for_the_first_time; do_stuff(); }
And expects Bar to be fully loaded when do_stuff() is called. This just isn't true; use Bar will only load, compile and execute Bar.pm if it hasn't been use'd before, but in this case it clearly is.

This is the "right" behaviour, because otherwise this would go into an infinite loop:

# Foo.pm use Bar; # Bar.pm use Foo;
In other words, this is a bug in interface.

update: s/import/BEGIN/;