perl - 无法调用方法状态 - 错误

标签 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]);

我得到一个错误提示

 "Can't call method state on undefined value in Line 6.  "

请帮助我了解这意味着什么、为什么会出现以及如何解决它..? 我知道“状态”在其他语言(C/Java)中是“静态”的同义词。我错了吗?

最佳答案

state 是一项相当新的功能(自 Perl 5.10 起),默认情况下未启用。启用它:

use feature 'state';

使用 state 有点等同于 Java 中的静态变量。另一种没有状态的方法是在 greetPerson 之外用一个简单的 my 声明 $previous,这意味着它在你的整个脚本范围内.

顺便说一句,您还应该在所有脚本中包含这些行,以免在后续过程中遇到很多麻烦:

use strict;
use warnings;

此外,在 greetPerson 中,您需要获取参数,您可以从 @_ 获取参数。例如

my ($name) = @_; # or
my $name = $_[0];

关于perl - 无法调用方法状态 - 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10808763/

相关文章:

perl - 在Perl中,如何将多个软件包放在单个.pm文件中?

c - Perl 到 C 到 DLL

perl 模式一一匹配并处理

perl - DBI-> connect上的错误处理

Perl Image::Resize 模块和 PNG 图像

perl - 在 Perl 中,如何简洁地检查 $variable 是否已定义并且包含非零长度字符串?

perl - 如何使用 %EXPORT_TAGS

perl - 在 perl 中初始化哈希引用

string - Perl 范围字符串 ID

linux - 为什么我的 mod_perl 脚本会卡住我的服务器?