In tcl, eval executes its arguments as tcl code, similar to its perl equivalent. But, you do not want this, instead you need to launch the perl interpreter as an external process and ask this interpreter to execute the script passed in its commandline. This is the job of exec in tcl.
exec perl perl_script
Read more about exec @ https://www.tcl.tk/man/tcl/TclCmd/exec.htm
UPDATE
exec will throw an error when the command returns a non-zero exit status. You need wrap exec with a catch to continue with non zero exit status. See WORKING WITH NON-ZERO RESULTS
UPDATE 2
The reason why eval perl script_path manages to successfully launch the perl interpreter is tcl's unknown magic. It is likely that you do not have tcl proc named perl. So, tcl calls the "unknown" proc, which tries to handle this exception intelligently by calling exec on its arguments since it finds an executable in $env(PATH). You can try info body unknown to see how this magic actually works.
tcl, but this page saysevalexecutes tcl passed to it as an argument rather than launch an external program (much like Perl'seval EXPRexecutes the Perl code in whichEXPRresults). I find your claim that this executes the Perl script doubtful, and I think that your problem will be solved if you actually used the correct function to launch a program.