在替换中使用未初始化的值 $_ (s///)
Use of uninitialized value $_ in substitution (s///)
我有一个脚本可以运行并下载一些数据。
大约 60 次拉动一切正常,然后突然出现错误:
在替换中使用未初始化的值 $_ (s///)
while ( my $row = $ia_applicant_query->fetchrow_arrayref ) {
s/\t/ /g for @$row; # <------- THIS IS WHAT THE ERROR POINTS TO
my $line = join "\t", map { defined $_ ? $_ : '.' } @$row;
$mydb->func( "$line\n", "putline" );
}
剩下的 800 次拉动会重复错误。
知道可能出了什么问题吗?
这意味着 @$row
中的一个值是 undef
,如果该列是 NULL
。
这可以通过替换
来避免
s/\t/ /g for @$row;
my $line = join "\t", map { defined($_) ? $_ : '.' } @$row;
和
my $line = join "\t", map { defined($_) ? s/\t/ /gr : '.' } @$row; # 5.14+
或
sub tabs_to_spaces { ( my $s = shift ) =~ s/\t/ /g; $s }
my $line = join "\t", map { defined($_) ? tabs_to_spaces($_) : '.' } @$row;
我有一个脚本可以运行并下载一些数据。 大约 60 次拉动一切正常,然后突然出现错误:
在替换中使用未初始化的值 $_ (s///)
while ( my $row = $ia_applicant_query->fetchrow_arrayref ) {
s/\t/ /g for @$row; # <------- THIS IS WHAT THE ERROR POINTS TO
my $line = join "\t", map { defined $_ ? $_ : '.' } @$row;
$mydb->func( "$line\n", "putline" );
}
剩下的 800 次拉动会重复错误。 知道可能出了什么问题吗?
这意味着 @$row
中的一个值是 undef
,如果该列是 NULL
。
这可以通过替换
来避免s/\t/ /g for @$row;
my $line = join "\t", map { defined($_) ? $_ : '.' } @$row;
和
my $line = join "\t", map { defined($_) ? s/\t/ /gr : '.' } @$row; # 5.14+
或
sub tabs_to_spaces { ( my $s = shift ) =~ s/\t/ /g; $s }
my $line = join "\t", map { defined($_) ? tabs_to_spaces($_) : '.' } @$row;