main

パッケージ名を宣言していない場合、そこの変数や関数はmainパッケージに含まれる。

package - パッケージの宣言 - Perl入門ゼミ

最初のprintは組み込み関数printとして呼ばれる。
その後、printを定義していて、パッケージ名がこのファイルには宣言されていないので、このprintはmainパッケージに含まれることになる。
main::printとした場合は、mainパッケージのprintが呼ばれるので、上で宣言したprintが呼ばれる。
その後で、ただprintと呼んだ場合は、組み込み関数のprintが呼ばれる。

$ vi main.pl
$ perl main.pl
ABC
DEF
JKL
$

main::printの場合、定義したprintの"DEF"が出力され、渡した"GHI"は使われない。
その後のprintは定義が上書きされるのかと思いきや、組み込み関数がそのまま呼ばれる模様。

Sample/perl/main/main/src/main at master · bg1bgst333/Sample · GitHub