为什么第4章不从';学习Perl第6版&x27;跑
我被困在学习Perl第6版第4章练习4第78页上。我从301页复制了这个问题的代码示例。我在Ubuntu 11.04上使用Perl版本5.10.1。我犯了一些我无法理解的错误,有人能帮我吗?我将在下面列出代码和错误消息为什么第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
#!/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)的方式非常感兴趣。我一定会尝试的。谢谢。