The two subroutines are encode/decode routines. The different names cause the program to encode/decode, instead of printing "The Perl Journal". Try "echo hello world |perl sink", and "echo _._ |perl swim". A simple character gets encoded to 3 characters on each of 2 lines. The statement ``(?n?&&open O,"|-")?y|-| ||print O K:print o'' would be clearer if it was split into separate statements. This statement is the key to the structure of the program.