POSIX::uname() does not call the external uname(1) program but the uname(2) syscall that, depending on the instruction set for which the running program was compiled, returns ia64 or i686.
So, calling POSIX::uname() is not going to solve the OP problem.
Comment on Re^3: Perl Distribution differences for i686/x86_64 and ia64 over Linux.