No, that is wrong. Satisfying
strict depends only on the compile-time effect of
my, for which its mere presence suffices. However, a conditional prevents its run-time effect of allocating a new scalar for that lexically scoped name, so that the name remains associated with the previously used variable. Observe:
use strict;
use warnings;
sub remember {
my $memory if 0;
print "Previous value of \$memory: $memory\n";
$memory = shift;
}
remember "foo";
remember 42;
remember "bar";
remember;
__END__
Use of uninitialized value in concatenation (.) or string at - line 6.
Previous value of $memory:
Previous value of $memory: foo
Previous value of $memory: 42
Previous value of $memory: bar
This
if 0 hack has been known for a long time and might even be useful if it weren't such a dirty trick. An actual condition in that place nearly certainly means that someone is going to be very surprised.
Makeshifts last the longest.