Sorry for not testing this (which would require multiple versions of Perl that I didn't already have handy). I suspect this will work based on prior similar code I've used:
BEGIN {
warnings->unimport('experimental::signatures')
if eval "no warnings 'experimental::signatures'; 1";
}
The advantage to this version is that it doesn't presume that the Perl version is a reliable indicator of whether or not some type of warning can be disabled. It is at least possible that some future version of something would mean that an upper bound on the version would need to be added. But I'm also not convinced that you can't have cases where unusual requirements lead to a mismatch between the Perl version and the behavior of "no warnings 'experimental::signatures';". For example, in building Perl for weird environments (like tiny Unix devices) I've ended up with versions of Perl where standard features got disabled because porting of base Perl got finished but not porting of some standard extensions for that version of Perl.