The other, very important difference is that -w is global, while use warnings is lexical. -w will turn on warnings for all the code used by the script, including in other files. use warnings, on the other hand, will only enable warnings for the block in which it occurs. If you put use warnings in your main script, you won't get warnings from the modules that you use.
It is probably sufficient to recommend -w for new programmers; it works in all versions of Perl, and is the most general way of getting warnings.