为什么第4章不从';学习Perl第6版&x27;跑

为什么第4章不从';学习Perl第6版&x27;跑,perl,Perl,我被困在学习Perl第6版第4章练习4第78页上。我从301页复制了这个问题的代码示例。我在Ubuntu 11.04上使用Perl版本5.10.1。我犯了一些我无法理解的错误,有人能帮我吗?我将在下面列出代码和错误消息 #!/usr/bin/perl -w use strict; greet( 'Fred' ); greet( 'Barney' ); sub greet { state $last_person; my $name = shift; print "Hi $na

我被困在学习Perl第6版第4章练习4第78页上。我从301页复制了这个问题的代码示例。我在Ubuntu 11.04上使用Perl版本5.10.1。我犯了一些我无法理解的错误,有人能帮我吗?我将在下面列出代码和错误消息

#!/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.
从:

从perl 5.9.4开始,您可以使用状态声明变量 关键字代替我的。不过,要想让它起作用,你必须 预先启用该功能,或者使用功能pragma, 或者在一行程序上使用-E。(见特写)


您需要在脚本顶部说
使用功能“state”
来启用
状态
变量。请参阅。

之前的方法是使用闭包:

{
    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;
    }
}


这个漂亮的特性在这个例子中也很有用。

你也可以说
use 5.010
use 5.10.0
,这会隐式激活该版本Perl中可用的所有特性。你的右页77练习前的最后一个代码示例页面显示了“use 5.010;”。我的程序现在运行正常。我以为通过使用pragma“use strict”;我被覆盖了,但它什么也没做,其中n在{0,2,4}感谢您抽出时间来帮助我。我应该输入“Use5.010;”,而不是“UseStrict;”。是在书中,我把两者混淆了。谢谢你抽出时间来帮助我。使用pragma'use 5.010;“正如上面向我指出的,这个程序是有效的。我对你上面的代码示例使用(if)和(else)的方式非常感兴趣。我一定会尝试的。谢谢。