in reply to Re^2: mocking or trapping system calls
in thread mocking or trapping system calls

I think overriding with *CORE::GLOBAL::system does actually work in most cases... The main reason that system doesn't have a prototype (which could be specified with Perl's prototype system), and thus is formally not overridable, is its "indirect object" syntax (without a comma after the first argument — see exec), which you can't (syntactically) handle with a Perl routine... As long as you don't need it, you should be fine. (But there would still be the problem with overriding backticks, as you're saying.)

Update: Here's a sample command using this indirect object syntax

system {'bash'} 'zsh', '-c', 'echo I think I am a $0'; # outputs "I think I am a zsh" (although it's a bash)

which works fine as long as system isn't overridden. If you try to override it, you'd just get a compile-time error

syntax error at ./685741.pl line 7, near "} 'zsh'" Execution of ./685741.pl aborted due to compilation errors.