2016-11-25 4 views
0

Может кто-нибудь объяснить мне, почему печатается только первый элемент этого массива?Почему этот код печатает только первый элемент?

print "Hello World!\n"; 

    @array1 = ("john","haider","elley","uul"); 

    @array2 = qw/This is an array/; 

    $array_size=scalar @array1; 

    print "Size: ",$array_size,"\n"; 

    $i; 

    for($i=0; $i<=$array_size; $i=$i+1) 
    { 
      print"Array elements are=",$array1[i],"\n"; 
    } 
+11

Это отличный пример ошибки, которую 'use strict' и' use warnings' поймали бы. Почему вы их не использовали? –

+0

Привет, спасибо за ответ! на самом деле я новичок в Perl, поэтому не могли бы вы рассказать мне, почему он не печатает все элементы. –

+1

Действительно, всегда используйте 'use strict; использовать предупреждения qw (все); '. Это выявит пять или более проблем в вашей программе! – ikegami

ответ

5

Потому что вы опечатали здесь: $array1[i].

Это должно быть $i, как в $array1[$i] - и это то, что use strict;use warnings бы предупреждал вас о. Bareword "i" not allowed while "strict subs" in use

Но, поскольку он используется, потому что вы используете i, и это не переменная - она ​​оценивается как ноль, поэтому вы просто печатаете первый элемент массива.

Лучше идиома будет:

foreach my $value (@array1) { 
    print "Array elements are=", $value,"\n"; 
} 

Это редко бывает необходимо (или желательно) для управления массивами с помощью индекса в Perl.

+0

Но если я буду использовать $ i, он напечатает значение i, которое будет от 0 до 4 .... исправьте меня, если я ошибаюсь –

+0

Спасибо @Sobrique ваш цикл foreach работает ... :) –

Смежные вопросы