<> uses the 2-arg
open, which combines the "mode" with the file name. It allows pipes to be specified and thus the script can be used to execute arbitrary commands. That may makes sense for some command line tools, but not in general. When using the 3-arg
open, the mode and the file name are kept seperate, so an arbitrary command cannot be sneaked in. Seperation of code and data is always safer.