Это:
my @array = (1,2,3);
system ("/tmp/a.sh @array" );
эквивалентно команде оболочки:
/tmp/a.sh 1 2 3
это можно увидеть, просто распечатав то, что вы передаете системе:
print "/tmp/a.sh @array";
a.sh
должен обрабатывать их как любой другой набор аргументов оболочки.
Чтобы быть в безопасности, вы должны обойти оболочку и передать массив в качестве аргументов напрямую:
system "/tmp/a.sh", @array;
При этом каждый элемент @array
передается как отдельный аргумент, а не как строка, разделенная пробелом. Это важно, если значения в @array
содержат пробелы, например:
my @array = ("Hello, world", "This is one argument");
system "./count_args.sh @array";
system "./count_args.sh", @array;
, где count_args.sh
:
#!/bin/sh
echo "$# arguments"
вы увидите, что в первом он получает 6 аргументов, а во втором - 2.
Краткое руководство по обработке аргументов в программе оболочки можно найти здесь .
В любом случае, зачем писать одну программу на Perl и одну в оболочке? Это усложняет использование двух языков, и в оболочке нет отладчика. Напишите их оба на Perl. А еще лучше напишите это как функцию в программе Perl.