私のCSVファイルの最初の行には、以下のフィールドの名前が含まれています。 ファイルを配列の配列に読み込み、0行目のシフトを試みます。perl:配列の配列から配列をシフトすると、特別なレベルの間接参照が追加されるのはなぜですか?
しかし、配列は別の配列レベルでラップされているようです。
どのようにして間接的にレベルを上げることができますか?
ここでは、コードです:
open CSV, "ExDivExport.csv" or die;;
@fields=();
while (<CSV>)
{ chomp;
($temp) = /^"(.+)"$/; # remove first and last "
@line=split /","/, $temp ;
print"\[email protected]"; # all the lines print correctly here
push @fields, [@line];
}
@names = shift @fields; # Here I shift off the 0th row
print "\nat12 [email protected]"; # prints: ARRAY(0x26e52c)
print "\nat13 names[0]=$names[0]"; # prints ARRAY(0x26e52c)
print "\nat14 names[0][0]=$names[0][0]"; # correctly prints first name 'Symbol'
余分なレベルのインダイレクションを取り除くと、csvファイルのすべての行の値がすべて1つの配列になります。あなたが本当に欲しいのはそれですか? – xxfelixxx
いずれにしても、自分でcsvを解析するべきではありません。ライブラリを使用する必要があります。そうしないと、エッジケースで噛まれる可能性があります。 'Text :: CSV'は良い選択でしょう:http://search.cpan.org/~makamaka/Text-CSV-1.33/lib/Text/CSV.pm – xxfelixxx
余分なレベルはあなたが' @line] 'を' @ fields'配列に追加します。 '[...]'は内容を配列リファレンスにラップします。 – xxfelixxx