Это сделано потому, что List :: Util использует функцию redu () внутри.
При отсутствии use vars
при использовании функции выдается следующее предупреждение:
Name "List::MyUtil::a" used only once: possible typo at a.pl line 35.
Name "List::MyUtil::b" used only once: possible typo at a.pl line 35.
Вы можете убедиться в этом сами, запустив следующий код:
use strict;
use warnings;
package List::MyUtil;
sub reduce (&@) {
# INSERT THE TEXT FROM SUBROUTINE HERE - deleted to save space in the answer
}
sub x {
return reduce(sub {$a+$b}, 1,2,3);
}
package main;
my $res = List::MyUtil::x();
print "$res\n";
И затем запустить его снова с отключенной use vars
.