Цитируется из здесь :
В идеале пользователь может захотеть передать массивы Perl в качестве аргументов следующим образом:
@a = (10,20,30,40);
@b = (50,70,60,200);
gd::plotpts($im,\@a,\@b,4,1); # Error!
Однако этот скрипт генерирует ошибку типа, а не действует так, как можно было бы ожидать.Хотя такое поведение может показаться ограничительным или странным, SWIG была специально разработана для работы таким образом.На самом деле, есть даже преимущества этого подхода.Если бы Perl-массивы использовались в качестве C-массивов, была бы сделана копия, проверена на корректность типов и освобождена каждый раз, когда массив передавался в C-функцию.Для больших массивов это привело бы к значительному снижению производительности.Требования к пространству также являются проблемой для некоторых программ на C.Например, числовое приложение может манипулировать массивами с миллионами элементов.Преобразование таких массивов в представление Perl и из него явно приведет к значительным затратам памяти и производительности.Напротив, манипулирование указателями на такие массивы является простым и эффективным.
Но я не совсем понимаю, почему это не так, может кто-нибудь проиллюстрирует более подробно!?