my $read;
while ($read = read FILE, $char, 1) {
print "got: $char\n";
}
die "read error: $!" if not defined $read;
Note that this reads a character at a time, not a byte; that's not the same thing unless you're using a 7/8-bit encoding. See read for more details.
Update: in terms of memory, this actually does read more than one byte at a time; but this is normally what you want. Perl performs buffering for you so you don't make many needless system calls. The buffer doesn't endanger your memory. See also sysread for the low-level call.