As I said, it depends if you are using threads or not.
On a multi-processor system and using only full Unix processes (not threads), a given process will normally be moved back and forth between cpus by the kernel, depending on the load on each cpu at each pt in time.
IE, it can only be running on one cpu at at any given pt in time (where cpu = core for multi-core chips).
If you use threads, they do not have separate process ids; they are Light Weight Processes (LWPs) within their owning Unix process (ie 1 pid = many threads).
In this case, each thread can run on separate cpus (at the same time), so the owning process appears to run on multiple cpus simultaneously.
Note that there is a sched_setaffinity http://linux.die.net/man/2/sched_setaffinity
option in C for processes, but it's rarely used by programmers.
Normally the kernel does a better job of schduling that you would manually.
For Perl, there is no builtin cmd, but there is a Module http://search.cpan.org/~mob/Forks-Su...CpuAffinity.pm
or just search for others at search.cpan.org.