in reply to using Exporter to overwrite a core function

Or you could do it the old-fashoned way:

BEGIN { *CORE::GLOBAL::sysread = sub (*\$$;$) { # whatever }; }
The prototype is probably desirable in this case; it comes from perl -e'print prototype "CORE::sysread"'.

If you want to limit the damage, you can localize the effect to a dynamic scope:

{ local *CORE::GLOBAL::sysread = \&mysysread; # do things that call builtin sysread } # no more replacement from here on

After Compline,
Zaxo