printf is a C function, yet it would not be the preferred way of doing things in C.
That's half right - printf is a C function, but it is not preferred in C++. It is preferred in C, of course.
The reason why printf is not the best way in C++ is that the compiler cannot check the variable types. If you use "%s" to print a string, and then use an integer variable instead, the program crashes at run time. With perl it would just convert the integer into a string and not crash, and with C++ style I/O, it would print the integer as a string. Also, printf cannot be extended to print objects, it is only able to print a few built in types.