为什么Perl会在我的CGI脚本中抱怨"使用未初始化的值"?

Mik*_*ike 3 apache variables perl warnings

我正在清理生产版本的Perl代码,并在Apache错误日志中遇到了一个奇怪的警告.

它说:

[Thu Nov 5 15:19:02 2009] Clouds.pm: Use of uninitialized value $name in substitution (s///) at /home/mike/workspace/olefa/mod-bin/OSA/Clouds.pm line 404.

相关代码在这里:

my $name         = shift @_;
my $name_options = shift @_;

$name_options = $name_options eq 'unique'     ? 'u'
              : $name_options eq 'overwrite'  ? 'o'
              : $name_options eq 'enumerate'  ? 'e'
              : $name_options =~ m/^(?:u|o|e)$/ ? $name_options
              : q();

if ($name_options ne 'e') {
   $name =~ s/ /_/g;
}
Run Code Online (Sandbox Code Playgroud)

那么,为什么未初始化变量的警告明显初始化?

Cli*_*rce 12

警告只是意味着$name从未填充过值,并且您尝试对其执行替换操作(s///).变量的默认值是undefined(undef).

回顾一下你的脚本,$name从中获取它的价值@_.这意味着要么@_是空的,要么是第一个值为undef.