<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>Hi Kevin,</div><div id="AppleMailSignature"><br></div><div id="AppleMailSignature">Thanks.  That "fixed" the problem.</div><div id="AppleMailSignature"><br></div><div id="AppleMailSignature">I don't have a StackOverflow account, but if you think it's worthwhile, I'll set one up over the weekend and we can do an encore performance.</div><div id="AppleMailSignature"><div><br></div>g.<div><br></div><div>Sent from a device that makes me type with two fingers.</div></div><div><br>On Nov 18, 2015, at 9:46 AM, Kevin Frost <<a href="mailto:biztos@mac.com">biztos@mac.com</a>> wrote:<br><br></div><blockquote type="cite"><div><meta http-equiv="Content-Type" content="text/html charset=utf-8">Wow, that’s a tricky one.  I thought I could get around it by subclassing Y::Foo and using the “experimentals” module but no luck.<div class=""><br class=""></div><div class=""><a href="http://search.cpan.org/~dconway/experimentals-0.015/lib/experimentals.pm" class="">http://search.cpan.org/~dconway/experimentals-0.015/lib/experimentals.pm</a></div><div class=""><br class=""></div><div class="">Instead I had to do the evil SIG trick, again with a subclass.  That way your Project Y can do whatever they want, as long as they don’t much change Y::Foo on you; and you access it through X::Y::Foo, which looks like this:</div><div class=""><br class=""></div><div class=""><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">package X::Y::Foo;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use strict;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use warnings;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">BEGIN {</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">    </span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">     local $SIG{'__WARN__'} = sub {};</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">     eval 'use base "Y::Foo";'</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">}</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">1;</span></font></div><div class=""><br class=""></div><div class="">At least for me, that works, as in:</div><div class=""><br class=""></div><div class=""><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use strict;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use warnings;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use Test::More tests => 3;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use Test::NoWarnings;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use lib qw(.);</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">BEGIN {</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">    use_ok('X::Bar');</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">}</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">is( X::Bar->baz, 'bat', 'drives one batty' );</span></font></div></div><div class=""><br class=""></div><div class="">…which is, I assume, something like what you’re running, since you said the warnings are causing the build to die.</div><div class=""><br class=""></div><div class="">By the way, for the warning-inducing Y::Foo I used this, the familiarity of which is not coincidental:</div><div class=""><br class=""></div><div class=""><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">package Y::Foo;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use v5.14;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">my $THING = {};</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">given ( $ENV{FOO} ) {</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">    $THING->{abc} = 1 when /^abc/;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">    $THING->{def} = 1 when /^def/;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">    $THING->{xyz} = 1 when /^xyz/;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">    default { $THING->{nothing} = 1 }</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">}</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">sub bar { return 'bat'; }</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">1;</span></font></div></div><div class=""><br class=""></div><div class="">…and in the interest of completeness, here’s my X::Bar, the stand-in for whatever actual use Project X makes of Y::Foo and thus the object of my tests:</div><div class=""><br class=""></div><div class=""><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">package X::Bar;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use strict;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use warnings;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">use X::Y::Foo;</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">sub baz { return X::Y::Foo->bar; }</span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class=""><br class=""></span></font></div><div class=""><font face="Courier" color="#942192" class=""><span style="font-size: 14px;" class="">1;</span></font></div></div><div class=""><br class=""></div><div class="">Hope that helps.  You probably have to add a bunch of ‘no critic’ to X::Y::Foo, plus a note of POD explaining to future generations why you did such a thing.</div><div class=""><br class=""></div><div class="">If you have a StackOverflow account please consider posting the question there, and I’ll post this answer too, so it might be more findable on the commercial Innernets.</div><div class=""><br class=""></div><div class="">cheers</div><div class=""><br class=""></div><div class="">— frosty</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div><blockquote type="cite" class=""><div class="">On Nov 18, 2015, at 5:32 PM, George Hartzell <<a href="mailto:hartzell@alerce.com" class="">hartzell@alerce.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">Hi All,<br class=""><br class="">I have a project X, that uses a package that's been installed by project Y, e.g. Y::Foo.pm.  That package was written in the heady days, just after given/when were introduced and it makes profligate, but safe, use of them.  I'm migrating project X forward to the modern era (Perl 5.18.2, sigh...) and Y::Foo's use of given/when generates warnings that, amongst other things, cause the compile tests to fail.<br class=""><br class="">I know how to fix the problem "at the source", but I can't get project Y to make an updated release.<br class=""><br class="">I can't figure out anything that I can do, in Project X's "using" package, that silences the warnings.<br class=""><br class="">At this point my options seem to be to install a private copy of the Y::Foo or to disable the tests (and live with the extra output).<br class=""><br class="">Can anyone suggest any other options?<br class=""><br class="">g.<br class=""><br class="">Sent from a device that makes me type with two fingers.<br class="">_______________________________________________<br class="">SanFrancisco-pm mailing list<br class=""><a href="mailto:SanFrancisco-pm@pm.org" class="">SanFrancisco-pm@pm.org</a><br class=""><a href="http://mail.pm.org/mailman/listinfo/sanfrancisco-pm">http://mail.pm.org/mailman/listinfo/sanfrancisco-pm</a><br class=""></div></blockquote></div><br class=""></div></div></div></blockquote></body></html>