File::Find 和 wanted 子程序这个问题比原始标题("原型和子程序的前向声明"!)简单得多.我希望答案,无论多么简单,都能帮助我理解子程序/函数,原型和范围以及File::Find模块.
使用Perl,子程序几乎可以出现在任何地方,你通常不需要进行前向声明(除非sub声明了一个原型,我不知道如何在Perl中采用"标准"方式).对于我通常用Perl做的事情,这些不同的运行方式之间没有什么区别somefunction:
sub somefunction; # Forward declares the function
&somefunction;
somefunction();
somefunction; # Bare word warning under `strict subs`
Run Code Online (Sandbox Code Playgroud)
我经常find2perl用来生成代码,我将这些代码整合到脚本的一部分中.这可能是糟糕的风格,现在我的脏衣服是公开的,但所以它是:-)因为File::Find该wanted功能是一个必需的子程序 - find2perl创建它并添加sub wanted;到它创建的结果脚本.有时候,当我编辑脚本时,我会从中移除" sub" sub wanted并最终为&wanted;或wanted();.但如果没有sub wanted;前瞻声明表格,我会收到此警告:
Use of uninitialized value $_ in lstat at findscript.pl line 29
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么会发生这种情况,这是一个真正的问题吗?这只是"警告",但我想更好地理解它.
$_是本地化的sub wanted {}.如果我使用wanted();而不是sub wanted;?为什么它会被定义?wanted某处使用原型?我错过了一些明显的东西Find/File.pm …