Никогда не пытайтесь редактировать переменную @_ !!!! Они не должны быть затронуты .. Или вы получите какой-то неожиданный эффект. Например ...
my $size=1234;
sub sub1{
$_[0]=500;
}
sub1 $size;
До вызова sub1 $ размер содержит 1234. Но после 500 (!!), поэтому вы не редактируете это значение !!! Вы можете передать два или более значений и изменить их в подпрограмме, и все они будут изменены! Я никогда не видел этот эффект описанным. Программы, которые я видел, также оставляют массив @_ доступным только для чтения. И только то, что вы можете безопасно передать переменную, не изменила внутреннюю подпрограмму
Вы всегда должны делать это:
sub sub2{
my @m=@_;
....
}
присваивает @_ переменным локальной подпрограммы и затем работает с ними.
Также в некоторых глубоко рекурсивных алгоритмах, которые возвращают массив, вы можете использовать этот подход для уменьшения памяти, используемой для локальных переменных. Только если вернуть @_ массив то же самое.