2017-11-22 21 views
2

私はいくつかのデータを実行してダウンロードするスクリプトを持っています。 すべてが約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は引きます。 何が間違っている可能性がありますか?

+0

s/\t/ /g for @$row; my $line = join "\t", map { defined($_) ? $_ : '.' } @$row; 

を交換することにより回避することができるので、その時点で$行@何ですか? – user2864740

+5

一部の列にNULLが含まれている可能性があります。 – choroba

答えて

8

つまり、@$rowの値のいずれかがundefであることを示します。これは、列がNULLの場合に発生します。

これは

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; 
関連する問題