in reply to why does removing "use 5.010;" break this?

use 5.010;
is equivalent to
BEGIN { $] >= 5.010 or die "Perl v5.10.0 required--this is only $^V, stopped"; } use feature qw( :5.10 );
which is equivalent to
BEGIN { $] >= 5.010 or die "Perl v5.10.0 required--this is only $^V, stopped"; } use feature qw( array_base say state switch );

Your program relies on the say and state features being activated, so if you remove use 5.010;, you need to add use feature qw( say state ); instead.

Note that those features were introduced in 5.10, so switching wouldn't gain you anything.