Perl - расщепление строки

Я делаю массив, который содержит каждое слово фразы. Когда я пытаюсь разделить его и вывести длину, консоль выдаёт мне огромное количество, например: 111039391231319239188238139123919232913123... (больше строк) почему?

Вот мой код:

$mynames = $texto3;
print $mynames. "\n";
@nameList = split(' ', $texto3);
#print @nameList.length();
for ($to = 0; $to<@nameList.length; $to++){
        if($to<@nameList.length) {
                @nameList[$to] = @nameList[$to] . "_" . @nameList[$to++];
         }
         print $to;
         #print @nameList[$to] . "\n";
 }
 $string_level2 = join(' ', @nameList);
 #print $string_level2;

1 ответ

Решение

Чтобы получить длину массива используйте scalar @nameList вместо @nameList.length,

Типичный цикл for использует оператор "меньше" при подсчете, например:

for ( $to = 0; $to < scalar(@nameList); $to++ ) ...

Вы никогда не должны использовать постинкремент, если вы не понимаете побочные эффекты. Я считаю, что следующая строка:

@nameList[$to] = @nameList[$to] . "_" . @nameList[$to++];

... должно быть написано как...


    $nameList[$to] = $nameList[$to] . "_" . $nameList[$to + 1];

Наконец, сравнение, которое вы используете, должно учитывать граничное условие (потому что вы ссылаетесь на $to + 1 внутри цикла):

if( $to < (scalar(@nameList) - 1) ) {
  $nameList[ $to ] = $nameList[ $to ] . "_" . $nameList[ $to + 1 ];
}
Другие вопросы по тегам