Приведем текст модуля Mod1.

package Mod1;
require Exporter;

@ISA = qw(Exporter);
#Экспортирование функции по умолчанию
@EXPORT = qw(reverselist);
#Экспортируемый массив по запросу
@EXPORT_OK = qw(@MyArgs);

sub reverselist 
{
  my ($x, $i); #Создание локальных переменных
  #Создание локального массива и 
  #копирование в него параметров
  @MyArgs = @_;
  #Цикл для обмена первого элемента с последним,
  #второго с предпоследним и т.д.
  for ($i = 0; $i < $#MyArgs/2; $i++)
  {
     $x=$MyArgs[$i];
     $MyArgs[$i] = $MyArgs[$#MyArgs - $i];
     $MyArgs[$#MyArgs - $i]=$x;
  }
}

    Мы, для примера, экспортируем функцию по умолчанию, а массив - по запросу. В цикле мы меняем местами первый и последний элементы, второй и предпоследний и т.д.

    Приведем текст модуля Mod2.

package Mod2;
require Exporter;

@ISA = qw(Exporter);
#Экспортируемый массив по умолчанию
@EXPORT = qw(@list);

@list=(1,2,3,4,5);

    Здесь массив экспортируется по умолчанию.

    Приведем текст основной программы. Он очень простой:

#! perl -w
#Подключение модулей
#Просим вернуть массив @MyArgs
use Mod1 qw(:DEFAULT @MyArgs);
#Возврат массива @list по умолчанию
use Mod2 qw(:DEFAULT);

print "Исходный массив: @list\n";
reverselist @list;
print "Итоговый массив: @MyArgs\n";

    Здесь все очень посто. Подключаем два модуля, выводим массив до его обработки функцией и после.

    Текст этой программы и модулей можно взять здесь.

    Результат работы приложения изображен на рисунке 1.


Рис.1. Пример работы скрипта