in reply to Why so strict?

First of all,
my $c = &func() ? say "$c found!" : say "None!";
means
my $c = ( &func() ? say "$c found!" : say "None!" );

Neither my $c nor the assignment has been evaluated when you tried to read $c. You meant

( my $c = &func() ) ? say "$c found!" : say "None!";

Fixing that error won't fix the error you see, though. Lexical variables only become visible the statement after the one in which they are created in order to allow the following to work.

my $x = 123; { my $x = $x; say $x; # 123 $x = 456; say $x; # 456 } say $x; # 123

Anyway,

my $c = func(); say $c ? "$c found!" : "None!";
is much clearer than the following cleaned-up but still non-functional version of your code:
say( ( my $c = func() ) ? "$c found!" : "None!" );