我正在使用 Perl 的Text::CSV庫,使用功能界面從 CSV 檔案匯入資料。資料存盤在哈希陣列中,問題是當腳本嘗試訪問這些元素/鍵時,它們是未初始化的(或未定義的)。
使用庫Dumper,可以看到陣列和哈希不是空的,實際上,它們正確地填充了 CSV 檔案的資料。
使用這一小段代碼,我得到以下輸出:
my $array = csv(
in => $csv_file,
headers => 'auto');
foreach my $mem (@{$array}) {
print Dumper $mem;
foreach (keys $mem) {
print $mem{$_};
}
}
輸出的最后一部分:
$VAR1 = {
'Column' => '16',
'Width' => '13',
'Type' => 'RAM',
'Depth' => '4096'
};
Use of uninitialized value in print at ** line 81.
Use of uninitialized value in print at ** line 81.
Use of uninitialized value in print at ** line 81.
Use of uninitialized value in print at ** line 81.
這發生在陣列的所有元素上。這個問題與編碼有關,還是我只是以不正確的方式訪問元素?
uj5u.com熱心網友回復:
$mem 是對哈希的參考,但您一直嘗試將其直接用作哈希。將您的代碼更改為:
foreach (keys %$mem) {
print $mem->{$_};
}
有一點復雜,在某些版本的 perl 中,'keys $mem' 被直接允許作為實驗性功能,后來被洗掉。在任何情況下,添加
use warnings;
use strict;
可能會給你一些關于正在發生的事情的有用線索。
uj5u.com熱心網友回復:
當我在我的 Perl (5.24) 版本上運行您的代碼時,我收到此錯誤:
標量上的實驗鍵現在被禁止在 ... 行 ...
這指向該行:
foreach (keys $mem) {
您應該取消參考哈希參考:
use warnings;
use strict;
use Data::Dumper;
use Text::CSV qw( csv );
my $csv_file="data.csv";
my $array = csv(
in => $csv_file,
headers => 'auto');
foreach my $mem (@{$array}) {
print Dumper($mem);
foreach (keys %{ $mem }) {
print $mem->{$_}, "\n";
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/478332.html
