2014-12-12 2 views
0

У меня есть эта функция: Ее предполагается просто напечатать через пользовательский связанный список:perl: переменная требует явной ошибки имени пакета?

sub myprint { 
    my $iter = shift->{top}; 
    my $refType = ref($iter); 
    while ($refType -ne "SCALAR") { #44 
     print $iter->{data}; 
     $iter=$iter->{prev}; 
     $refType = ref($iter); 
    } 
} 

ошибки:

[email protected]:/media/20B9-BF25/perl/OOP$ perl test_linked_list.pl 
syntax error at cs351/linked_list/MyLinkedList.pm line 44, near "-ne" 
Global symbol "$iter" requires explicit package name at cs351/linked_list/MyLinkedList.pm line 46. 
Global symbol "$iter" requires explicit package name at cs351/linked_list/MyLinkedList.pm line 46. 
Global symbol "$refType" requires explicit package name at cs351/linked_list/MyLinkedList.pm line 47. 
Global symbol "$iter" requires explicit package name at cs351/linked_list/MyLinkedList.pm line 47. 
syntax error at cs351/linked_list/MyLinkedList.pm line 48, near "}" 
Compilation failed in require at test_linked_list.pl line 3. 
BEGIN failed--compilation aborted at test_linked_list.pl line 3. 
+0

Я просто попробовал запустить тестовую программу с этой функцией, прокомментированной. Он работал без ошибок. –

+2

'-ne' не делает то, что вы думаете. Perl не имеет '-' в качестве префикса для сравнения строк. – Sobrique

ответ

4

Никогда не доверяйте ошибку, которая приходит после того, как ошибка синтаксиса.

В строке 44, -ne есть ошибка, она должна быть ne (вы, вероятно, считали оболочкой, а не perl).

Исправьте это, и другие ошибки исчезнут, или, по крайней мере, у вас останется другая ошибка, которой вы можете доверять и что-то сделать.

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