My understanding is that "does" will prevent coercion. In particular, it is erroneous to say that 'Str does Num' or that 'Num does Str'.
If you say 'Foo does Bar', what this means is that anything Bar can do, Foo can do, too. As such, any routine that asks for a Bar can just as easily be given a Foo. It doesn't convert the Foo into a Bar; it simply uses it as is. As such, the only time coercion might take place is when the object that you're trying to use _doesn't_ do the role that's being asked for. -- Jonathan "Dataweaver" Lang