Что означает @ в Perl?


что означает @_ в Perl?

9 78

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 то же самое.