Well, you could use a useless assignment to (). Except it's not useless. As you've already demonstrated, a list assignment in scalar context returns the number of scalars returned by its RHS.
( my @a = `route print`=~ m!0.0.0.0!g ) > 3
can be shortened to
( () = `route print`=~ m!0.0.0.0!g ) > 3
and broken
my $n = $str =~ m/this/g;
should be changed to one of
my $n = () = $str =~ m/this/g;
my $n = grep 1, $str =~ m/this/g;
my $n = map $_, $str =~ m/this/g;
Some might prefer
my $n = 0; ++$n while $str =~ m/this/g;