我对Perl很陌生,正在努力解决Llama书中的一些运动问题.问题是要编写一个子程序,如果他是第一个人,则欢迎一个人欢迎,或者告诉他前一个人的名字.我的代码看起来像:
#! perl
# This is the greeter problem .
sub greetPerson{
state $previous = undef ;
if($previous eq undef){
print " Welcome ... u r the first \n";
}
else{
print " Hi ... $previous was already here \n";
}
$previous = $_;
return 0;
}
@code = ("ravi" , "teja" , "chandu");
greetPerson($code[0]);
greetPerson($code[1]);
greetPerson($code[2]);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说
"Can't call method state on undefined value in Line 6. "
Run Code Online (Sandbox Code Playgroud)
请帮助我了解这意味着什么以及为什么要来解决它...?据我所知,"state"与其他语言(C/Java)中的"static"同义.我错了吗?
state是一个相当新的功能(自Perl 5.10以来)默认情况下未启用.要启用它:
use feature 'state';
Run Code Online (Sandbox Code Playgroud)
使用state有点相当于在Java中使用静态变量.在没有状态的情况下执行此操作的另一种方法是$previous使用简单的my外部声明greetPerson,这意味着它在整个脚本中作用域.
另外,您还应该在所有脚本中包含这些行,以便在赛道上节省很多麻烦:
use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)
此外,greetPerson你需要得到你的论据,你可以得到@_.例如
my ($name) = @_; # or
my $name = $_[0];
Run Code Online (Sandbox Code Playgroud)