2013-08-05 1 views
5

Я читаю текстовый файл с именем, говоря, частоту, которая имеет данные в следующем формате:Perl функции проталкивании дает значение индекса вместо элементы массива

1 

1 

13 

2 

Я хочу читать строки и сохранять значение в таком массиве: @a=(1, 1, 13, 2). Функция push Perl дает индексные значения/номера строк, т. Е. 1,2,3,4 вместо моего желаемого выхода. Не могли бы вы указать на ошибку? Вот что я сделал:

use strict; 
use warnings; 

open(FH, "<mention-freq") || die "$!"; 
my @a; 
my $line; 
while ($line = <FH>) 
{ 
    $line =~ s/\n//; 
    push @a, $line; 
    print @a."\n"; 
} 
close FH; 
+0

Мне нравится 'twoHandsTwoCutsFunction' функция :)' суб {отображение {s/^ \ х + //; s/\ s + $ //; $ _} @_} ' – gaussblurinc

ответ

10

Исправлена ​​ошибка в том, что вы печатаете конкатенацию @a и символ новой строки. Когда вы объединяетесь, это заставляет скалярный контекст. Скалярный смысл массива - это не его содержимое, а его количество элементов.

Вы просто хотите

print "@a\n"; 

вместо этого.

Кроме того, в то время как это не повлияет на ваш код здесь, нормальный способ, чтобы удалить запись терминатора читать оператором <> Readline использует chomp:

chomp $line; 
Смежные вопросы