Что означает @ в Perl?
что означает @_
в Perl?
9 ответов:
perldoc perlvar это первое место, чтобы проверить для любого специального имени Perl переменной информации.
цитирую:
@_
: внутри подпрограммы массив@_
содержит параметры, переданные этой подпрограммы.
обычно вы расширяете параметры, переданные в sub С помощью
@_
переменной:sub test{ my ($a, $b, $c) = @_; ... } # call the test sub with the parameters test('alice', 'bob', 'charlie');
именно так утверждал, что это правильно perlcritic.
первый удар искать
perl @_
говорит этой:@_ список входящих параметров в подпрограммы.
Он также имеет более длинное и более подробное объяснение того же самого.
вопрос был в том, что
@_
означает в Perl. Ответ на этот вопрос таков, поскольку$_
означает это в Perl,@_
означает они.никто, кажется, не упомянул этот критический аспект его значение-а также их.
Они, следовательно, оба используются в качестве местоимений,а иногда и в качестве актуализаторов.
Они, как правило, имеют номинальную прошлое, хотя и не всегда.
все "специальные переменные" Perl перечислены в perlvar на странице документации.
вы также можете использовать Shift для отдельных переменных в большинстве случаев:
$var1 = shift;
это тема, в которой вы должны исследовать дальше, поскольку Perl имеет ряд интересных способов доступа к внешней информации внутри вашей подпрограммы.
также, если функция возвращает массив, но функция вызывается без присвоения возвращенных данных какой-либо переменной, как показано ниже. Здесь split () вызывается, но не присваивается ни одной переменной. Мы можем получить доступ к его возвращенным данным позже через@_:
$str = "Mr.Bond|Chewbaaka|Spider-Man"; split(/\|/, $str); print @_[0]; # 'Mr.Bond'
это разделит строку
$str
и установить массиве@_
.
@
используется для массива.в подпрограмму, или при вызове функции в Perl, вы можете передать список параметров. В таком случае,
@_
is можно использовать для передачи списка параметров в функцию:sub Average{ # Get total number of arguments passed. $n = scalar(@_); $sum = 0; foreach $item (@_){ # foreach is like for loop... It will access every # array element by an iterator $sum += $item; } $average = $sum / $n; print "Average for the given numbers: $average\n"; }
вызов функции
Average(10, 20, 30);
если вы соблюдаете приведенный выше код, см.
foreach $item(@_)
линии... Здесь он передает входной параметр.
никогда не пытайтесь редактировать в @ _ variable!!!! Их нельзя трогать.. Или вы получаете какой-то неожиданный эффект. Например...
my $size=1234; sub sub1{ $_[0]=500; } sub1 $size;
перед вызовом sub1 $ размер содержит 1234. Но после 500(!!) Так что вы не редактируете это значение!!! Вы можете передать два или более значений и изменить их в подпрограмме, и все они будут изменены! Я никогда не видел этот эффект описан. Программы, которые я видел, также оставляют @ _ array только для чтения. И только то, что вы можете безопасно передать переменную, не меняйте внутреннюю подпрограмма Вы всегда должны это делать:
sub sub2{ my @m=@_; .... }
присвоить @ _ переменным процедуры локальной подпрограммы и затем работать с ними. Также в некоторых глубоких рекурсивных алгоритмах, которые возвращают массив, вы можете использовать этот подход для уменьшения памяти, используемой для локальных vars. Только если return @_ array то же самое.