2013-03-01 2 views
1

Вот кусок кода:Perl "->" оператор

foreach my $in (@_) 
{ 
    my $x1 = sprintf("%.2f", $in->[0]); 
    my $x2 = sprintf("%.2f", $in->[1]); 
    my $x3 = sprintf("%.2f", $in->[2]); 
    $count++; 
    print "running: $x1 $x2 $x3\n"; 
    print PF "$x1 $x2 $x3\n"; 
} 

Я интересно, что это $ в переменной? Это массив? Почему мы используем $ in -> [0] вместо $ in [0] здесь? Как получить длину $ в?

Спасибо!

+5

'$ man perlref' – Jokester

ответ

4

$in - ссылка на массив (поэтому @_ был массивом ссылок на массивы).

Вы получаете количество элементов (предполагая, что это то, что вы подразумеваете по длине), с scalar(@$in) (или просто используя @$in в скалярном контексте).

3

Вы не можете встраивать массивы внутри других структур в Perl. Вы должны использовать ссылку на массив, который является скаляром (поэтому он использует $) и которому требуется ->, чтобы получить данные.

Достаточно сказать, что это большая тема, которая является неотъемлемой частью любого нетривиального программирования Perl. Дайте perlreftut a прочитайте.

1

$in является скалярным держателем ссылки ARRAY.

использовать Data::Dumper и проверить, что является содержанием @_. Если это ссылки, то для доступа к ним мы используем ->.

В коде

  • $in->[0] будет означать, что вы обращаетесь к первому элементу массива в качестве ссылки @_.
  • $in->[1] означает, что вы обращаетесь к второму элементу ссылки на массив в @_.
  • $in->[2] будет означать, что вы обращаетесь к третьему элементу ссылки на массив в @_.
Смежные вопросы