echo can take any number of arguments.
echo "foo", $foo, "bar", $bar;
print seems to want only one argument, although you can use the concatenation operator to get around that.
print "foo" . $foo . "bar" . $bar;
printf() is entirely different; it is a versatile tool (based on the C function of the same name) for formatting data on output. You shouldn't use it unless you actually need the formatting capabilities. It takes more CPU time than the simpler print and echo. It is harder to read the code, and you are more likely to make mistakes. See the manual page for sprintf() for details on how to use the formatting options.