<p>I have a Perl script that I'm attempting to set up using Perl Threads (use threads).  When I run simple tests everything works, but when I do my actual script (which has the threads running multiple SQL<em>Plus sessions), each SQL</em>Plus session runs in order (i.e., thread 1's sqlplus runs steps 1-5, then thread 2's sqlplus runs steps 6-11, etc.).</p>

<p>I thought I understood that threads would do concurrent processing, but something's amiss.  Any ideas, or should I be doing some other Perl magic?</p>

Actually, you have no way of guaranteeing in which order threads will execute. So the behavior (if not what you expect) is not really wrong.
I suspect you have some kind of synchronization going on here. Possibly SQL*Plus only let's itself be called once? Some programs do that...
Other possiblilties:
thread creation and process creation (you
are
creating subprocesses for SQL*Plus, aren't you?) take longer than running the thread, so thread 1 is finished before thread 2 even starts
You are using transactions in your SQL scripts that force synchronization of database updates.