With the comma list of prints your just making a list and ignoring it's acutal value
think about this
@a=(foo,bar,bah);
valid code, right? now how bout this?
(foo,bar,bah);
Again valid code, it doesn't do anything but it's valid and will get evalated. Code doesn't HAVE to do something. Now if you can also do
@a=(joe(),someothersub());
This will set @a to the return values of joe and someothersub, your doing the same thing with print
(joe(),someothersub());
or
(print("hello"),print "\n");
This is also valid code, calls both functions puts their return values into a list, and then forgets the list.
(feel free to correct me if I'm wrong)