The strangeness seems to be in the diamond operator. If I use a sub instead, I get a warning:
#!/usr/bin/perl -w
open FOO, "< /dev/null"
or die "No foo: $!\n";
#scalar(<FOO>) =~ /bar/
(rf() =~ /bar/)
and print "bar\n";
sub rf
{
return scalar(<FOO>);
}