我正在清理生产版本的Perl代码,并在Apache错误日志中遇到了一个奇怪的警告。为什么Perl会在我的CGI脚本中抱怨“使用未初始化的值”?
它说:
[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;
}
那么,为什么未初始化变量的警告,因为它清楚地初始化?
你怎么知道你通过什么这个功能呢? – 2009-11-05 14:35:56
在计算机编程中,“清楚”,“明显”和“直截了当”等词语具有讽刺意味。你说他们的那一刻,情况正好相反。这是宇宙的规律。 – 2009-11-05 15:43:32
哪一行是404? – Ether 2009-11-05 16:05:20