Почему не запускается этот пример главы 4 из «Learning Perl 6th edition»? - PullRequest
3 голосов
/ 16 сентября 2011

Я застрял в главе 4, упражнение 4, стр. 78 учебного пособия по 6-му изданию.Я скопировал пример кода для проблемы со страницы 301. Я использую Perl версии 5.10.1 в Ubuntu 11.04.Я получаю ошибки, которые не могу понять, может кто-нибудь помочь?Я перечислю код и сообщение об ошибке ниже.

#!/usr/bin/perl -w
use strict;

greet( 'Fred' );
greet( 'Barney' );

sub greet {
  state $last_person;

  my $name = shift;

  print "Hi $name! ";

  if( defined $last_person ) {
      print "$last_person is also here!\n";
 }
  else {
      print "You are the first one here!\n";
}
  $last_person = $name;
}


Global symbol "$last_person" requires explicit package name at ./ex4-4 line 8.
Global symbol "$last_person" requires explicit package name at ./ex4-4 line 14.
Global symbol "$last_person" requires explicit package name at ./ex4-4 line 15.
Global symbol "$last_person" requires explicit package name at ./ex4-4 line 20.
Execution of ./ex4-4 aborted due to compilation errors.

Ответы [ 3 ]

9 голосов
/ 16 сентября 2011

Вы должны сказать use feature 'state' вверху вашего скрипта, чтобы включить state переменные.Смотрите perldoc -f состояние .

6 голосов
/ 16 сентября 2011

Из руководства :

Начиная с perl 5.9.4, вы можете объявлять переменные с состоянием Ключевое слово вместо моего. Чтобы это работало, вы должны иметь включил эту функцию заранее, либо используя прагму функции, или используя -E на однострочниках. (см. функцию)

1 голос
/ 16 сентября 2011

Предварительный feature способ сделать это с закрытием:

{
    my $last_person;

    sub greet {

        my $name = shift;

        print "Hi $name! ",
          defined $last_person ? "$last_person is also here!"
                               : "You are the first one here!",
          "\n";

        $last_person = $name;
    }
}

Отличная функция say такжебыть полезным в этом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...