在perl模块中,子函数后需要分号吗?

时间:2013-05-07 13:11:04

标签: perl module

我正在为工作编写代码并遇到了一个有趣的问题。我搜索了有关该主题的资源,但没有找到明确的答案。

在Perl模块中编写子函数时,在结束括号后是否需要分号?

如:

sub printFoo {

print "foo";

};

这是否与常规Perl脚本中的子函数有所不同?

当我在没有分号的模块中使用上述函数时,我得到一个引用“未定义子例程”的错误。

我有信心在过去我使用了类似的代码片段而没有在结束括号后面的分号但是现在我不再是正面了。

向正确的方向推进会很棒!

2 个答案:

答案 0 :(得分:5)

如果您正在编写匿名函数,那么您需要使用分号,即

my $func = sub {
   print "foo";
};

对于普通函数,不需要分号,实际上解析器适用于:

perl -MO=Deparse semi
sub printFoo {
    print 'foo';
}

-

cat semi
sub printFoo {

print "foo";

};

答案 1 :(得分:0)

分号不是必需的,不会影响任何内容。

从同一模块的代码或使用该模块的主程序调用sub时,您是否收到“未定义的子程序”?

如果是后者,可能是因为您没有导出子名称。