shift
использует переменную @_
, которая содержит значения, переданные в функцию, или shift
использует @ARGV
для значений, переданных самому сценарию, если на shift
есть ссылка вне функции.
ОДНО СЛОВО ПРЕДУПРЕЖДЕНИЯ. Вероятно, целесообразно, особенно в Windows, где многие пути содержат пробелы, указывать имя файла и путь в одинарных кавычках при передаче их в сценарий или функцию. Это скажет Perl, что вы передаете ему одно скалярное значение, а не массив значений. Вы можете использовать двойные кавычки, если хотите интерполировать часть имени. Например:
my $path = 'C:\Goat Kids';
func("$path\\goat.txt");
Или из командной строки, если вы передаете имя файла непосредственно в скрипт:
perl goat.pl "C:\Goat Kids\goat.txt"