Well, no perl script here (and, anyway, 9i tkprof gives all the wait details for us), but when I was restricted to 8i only, I used to do the following :

Code:
 grep WAIT *.trc  | sort +3 -t: >  loadtrace.dat
 grep PARSE *.trc | sort +3 -t: >> loadtrace.dat
 grep EXEC *.trc  | sort +3 -t: >> loadtrace.dat
 grep FETCH *.trc | sort +3 -t: >> loadtrace.dat
 grep UNMAP *.trc | sort +3 -t: >> loadtrace.dat
 grep STAT *.trc  | sort +3 -t: >> loadtrace.dat
 
drop table waittrace;
create table waittrace (fname varchar2(30),
op varchar2(10),
opseq varchar2(10),
waithd varchar2(10),
wait varchar2(30),
elah varchar2(5),
ela number, 
p1 varchar2(30),
p2 varchar2(30),
p3 varchar2(30));
drop table stattrace;
create table stattrace(
fname varchar2(30),
op varchar2(10),
opseq varchar2(10),
id number,
cnt number,
pid number,
pos number,
obj number,
operation varchar2(60));

drop table cputrace;
create table cputrace(
fname varchar2(30),
op varchar2(10),
opseq varchar2(10),
c number,
e number,
p number,
cr number,
cu number,
mis number,
r number,
dep number,
og number,
tim number(20));

==> put in loadtrace.ctl the following:

LOAD DATA INFILE 'loadtrace.dat' APPEND
INTO TABLE waittrace
  WHEN op = 'WAIT'
    FIELDS TERMINATED BY " " 
  trailing nullcols
  (fname  char   terminated by ":",
   op     char   terminated by " ",
   opseq  char   terminated by ":",
   waithd char   terminated by "=",
   wait   char   enclosed by "'",
   elah   char ,
   ela    char,
   p1     char,
   p2     char,
   p3     char
 )
INTO TABLE cputrace
  WHEN op = 'PARSE'
  trailing nullcols
  (fname POSITION(1) char terminated by ":",
   op    char    terminated by " " ,
   opseq char    terminated by ":" ,
   c             enclosed by "c="   AND ",",
   e             enclosed by "e="   AND ",",
   p             enclosed by "p="   AND ",",
   cr            enclosed by "cr="  AND ",",
   cu            enclosed by "cu="  AND ",",
   mis           enclosed by "mis=" AND ",",
   r             enclosed by "r="   AND ",",
   dep           enclosed by "dep=" AND ",",
   og            enclosed by "og="  AND ",tim=",
   tim terminated by "," 
  )
INTO TABLE cputrace
  WHEN op = 'EXEC'
  trailing nullcols
  (fname POSITION(1) char        terminated by ":",
   op    char    terminated by " " ,
   opseq         char    terminated by ":" ,
   c             enclosed by "c="   AND ",",
   e             enclosed by "e="   AND ",",
   p             enclosed by "p="   AND ",",
   cr            enclosed by "cr="  AND ",",
   cu            enclosed by "cu="  AND ",",
   mis           enclosed by "mis=" AND ",",
   r             enclosed by "r="   AND ",",
   dep           enclosed by "dep=" AND ",",
   og            enclosed by "og="  AND ",tim=",
   tim terminated by "," 
   ) 
INTO TABLE cputrace
  WHEN op = 'FETCH'
  trailing nullcols
  (fname POSITION(1) char        terminated by ":",
   op    char    terminated by " " ,
   opseq         char    terminated by ":" ,
   c             enclosed by "c="   AND ",",
   e             enclosed by "e="   AND ",",
   p             enclosed by "p="   AND ",",
   cr            enclosed by "cr="  AND ",",
   cu            enclosed by "cu="  AND ",",
   mis           enclosed by "mis=" AND ",",
   r             enclosed by "r="   AND ",",
   dep           enclosed by "dep=" AND ",",
   og            enclosed by "og="  AND ",tim=",
   tim terminated by "," 
   )
INTO TABLE cputrace
  WHEN op = 'UNMAP'
  trailing nullcols
  (fname POSITION(1) char        terminated by ":",
   op    char    terminated by " " ,
   opseq         char    terminated by ":" ,
   c             enclosed by "c="   AND ",",
   e             enclosed by "e="   AND ",",
   p             enclosed by "p="   AND ",",
   cr            enclosed by "cr="  AND ",",
   cu            enclosed by "cu="  AND ",",
   mis           enclosed by "mis=" AND ",",
   r             enclosed by "r="   AND ",",
   dep           enclosed by "dep=" AND ",",
   og            enclosed by "og="  AND ",tim=",
   tim terminated by "," 
   ) 
INTO TABLE stattrace
  WHEN op = 'STAT'
  trailing nullcols
  (fname POSITION(1) char        terminated by ":",
   op            char    terminated by " " ,
   opseq         char    terminated by " " ,
   id            enclosed by "id="  AND " ",
   cnt           enclosed by "cnt=" AND " ",
   pid           enclosed by "pid=" AND " ",
   pos           enclosed by "pos=" AND " ",
   obj           enclosed by "obj=" AND " ",
   operation     enclosed by "op='" AND "'"
   )
==> and finally invoke SQL*Loader

sqlldr userid/passwd control=loadtrace.ctl direct=true

from here is easy, you can select the tables in any way you like.

Regards,

Chiappa