But, when you use those functions, it will be executed by the shell, and the value will be returned.
Really?
q:~ [10:07:26]$ ps U blazar
PID TTY STAT TIME COMMAND
11831 ? S 0:00 sshd: blazar@pts/0
11838 pts/0 Ss 0:00 -bash
11857 pts/0 R+ 0:00 ps U blazar
q:~ [10:07:32]$ perl -e 'system qw/sleep 600/'
[1]+ Stopped perl -e 'system qw/sleep 600/'
q:~ [10:08:09]$ ps U blazar
PID TTY STAT TIME COMMAND
11831 ? S 0:00 sshd: blazar@pts/0
11838 pts/0 Ss 0:00 -bash
11908 pts/0 T 0:00 perl -e system qw/sleep 600/
11909 pts/0 T 0:00 sleep 600
11922 pts/0 R+ 0:00 ps U blazar
I don't see additional shells...
(To the benefit of the OP) this "detail" apart, indeed system calls are expensive.