无法调用方法状态 - 错误

Fla*_*ash 2 perl

我对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"同义.我错了吗?

ste*_*enl 9

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)

  • 注意:也可以使用`use 5.010;`(或更高版本)而不是`use feature qw(state);`. (4认同)