In your first example, you did a use POSIX; in the second, you did not. Why?
Without loading POSIX you won't be able to call a function like POSIX::cuserid.
Enable
strictwarnings and see yourself what happens:
$ perl -wE 'say POSIX::cuserid'
Name "POSIX::cuserid" used only once: possible typo at -e line 1.
say() on unopened filehandle cuserid at -e line 1.
But with loading POSIX:
$ perl -MPOSIX -wE 'say POSIX::cuserid'
linuxer
Updates
- replaced strict with warnings; removed strict from code examples; the warning is the crucial part.