2013-09-25 2 views
3

У меня есть файл, который имеетPerl Ошибка: Глобальный символ требует четкого определения имени пакета

#File content 
    word1 -> word2 
word3 -> word4 

и мне нужно поставить это в 2-х разных массивах, как

@array1 = word1, word3 
@array2 = word2, word4 

Мой код ниже

my @mappings = `cat $file_name`; 
foreach my $map (@mappings) { 
    $map =~ s/^\s+|\s+$//g; #Remove leading and trailing spaces 
    next if ($map =~ /^#/); 
    my @Mainarray = split ('->',$map); 
    my @array1 = push(@array1,@Mainarray[0]); **#Error line** 
    my @array2 = push(@array2,@Mainarray[1]); **#Error line** 
    print("Array1: @array1\nArray2:@array2\n"); 
} 

Я получаю эту ошибку:

Global symbol "@array1" requires explicit package name. 
Global symbol "@array2" requires explicit package name. 

Может кто-то, пожалуйста, помогите мне с этим.

+0

возможно дубликат [Global символ требует явного имя пакета] (http://stackoverflow.com/questions/3141412/global-symbol-requires-explicit-package-name) – Cfreak

+0

Добро пожаловать в Stack Overflow , Вскоре прочитайте страницу [О программе]. Предоставьте полный код; вы почти наверняка используете 'use strict;' и 'use warnings', которые вы не показываете. Вы также не показываете номера строк, которые Perl генерирует с сообщением об ошибке. Прочтите, как сделать SSCCE ([Short, Self-Contained, Correct Example] (http://sscce.org/)). –

+0

Я использую строго в своем коде. Весь код составляет почти 500-600 строк. Поэтому я не смогу его вставить. Я просто обновил строки ошибок в коде выше, написав небольшой комментарий рядом с ним. – Rancho

ответ

3

путь вы его переосмысление @array1 & @array2 каждый раз через петлю Еогеасп, и пытается установить их равным значению, которое содержит неопределенное значение (сам по себе). Попробуйте это:

my @mappings = `cat $file_name`; 
my @array1; 
my @array2; 
foreach my $map (@mappings) { 
    $map =~ s/^\s+|\s+$//g; #Remove leading and trailing spaces 
    next if ($map =~ /^#/); 
    my @Mainarray = split (/->/,$map); 
    push(@array1, $Mainarray[0]); 
    push(@array2, $Mainarray[1]); 
    print("Array1: @array1\nArray2:@array2\n"); 
} 
+0

Это работает отлично! Никогда не понимал, какую часть переопределить, когда он зацикливается! Спасибо. – Rancho

+0

Да, когда у вас есть 'my' в цикле, переменная получает каждый раз сброс. –

+0

Уверен, я вижу это сейчас. Спасибо – Rancho

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