PROBLEM SOLVED!
$ cygcheck /home/phil/perl5/lib/perl5/x86_64-cygwin-threads-multi/auto/IO/IO.dll
...
cygcheck: track_down: could not find cygperl5_32.dll
$ perl -version
This is perl 5, version 36, subversion 3 (v5.36.3) built for x86_64-cygwin-threads-multi (with 6 registered patches, see perl -V for more detail)
$ ls -l /bin/cygperl5*
-rwxr-xr-x 1 phil Administrators 3798547 Nov 30 2023 /bin/cygperl5_36.dll*
$ ls -ld /home/phil/perl5/lib/perl5
drwxr-xr-x 1 phil None 0 Nov 14 2023 /home/phil/perl5/lib/perl5/
$ ls /bin/cygperl5*
/bin/cygperl5_36.dll*
Between Nov 14 and 30 2023, my Cygwin changed from storing its DLLs under my home directory, to storing them under /bin . I don't remember changing this. Also, this doesn't explain why a fresh install of Cygwin had the same problem. But doing
mv /home/phil/perl5 /home/phil/perl5.32
stopped perl from finding the old io.DLL under /home/phil/perl5, which is looking for cygperl5_32.dll, and got my perl working again.