在 Text::CSV::Hashify 中使用未初始化



我是初学者。我正在尝试将 CSV 文件中的值分配给哈希。我整天都很累。我已经合上了手。我的csv:

currency,asset,exchange,strategy,profit,profitday,yearlyprofit,marketchange,profitmarket,tradeamount,tradesday,winingtrades,lossetrades,percentagewins,bestwin,medianwins,worstloss,medianloss,candlesize,warmupperiod,daysofdataset,backteststart,datasetfrom,datasetto,pricevolality,note
USD,BTC,bitfinex,BBRSI,0.00,-1,0,-2.55,2.55,0,-1,0,0,-1,,na,,na,5,144,0,"2018-03-25 01:15:39","2018-03-24 00:00:00","2018-03-24 12:00:00",11.20,"shorter period"
USD,XMR,bitfinex,BBRSI,0.00,-1,0,-2.18,2.18,0,-1,0,0,-1,,na,,na,5,144,0,"2018-03-25 01:15:39","2018-03-24 00:00:00","2018-03-24 12:00:00",17.41,"shorter period"

行尾为 \r。

脚本:

#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my $csvfile = 'gekko/backtestbitfinex/testowy.csv';
my $obj;
use Text::CSV::Hashify;

# Object-oriented interface
use Text::CSV::Hashify;
$obj = Text::CSV::Hashify->new( {
file => $csvfile,
format => 'hoh', # hash of hashes, which is default
key => 'asa',
#eol => 'rn',
sep_char => ',',
quote_char => '',
escape_char => '',
binary => 1,
decode_utf8 => 0,
auto_diag => 1,
diag_verbose => 1,
blank_is_undef => 0,
empty_is_undef => 0,
allow_whitespace => 1,
allow_loose_quotes => 1,
allow_loose_escapes => 1,
allow_unquoted_escape => 1,
always_quote => 1,
quote_empty => 1,
quote_space => 1,
escape_null => 1,
quote_binary => 1,
keep_meta_info => 1,
verbatim => 0,

} ); 
print Dumper $obj;

输出错误:

Use of uninitialized value $kk in hash element at /usr/local/share/perl/5.22.1/Text/CSV/Hashify.pm line 353, <GEN0> line 2.
Use of uninitialized value $kk in hash element at /usr/local/share/perl/5.22.1/Text/CSV/Hashify.pm line 357, <GEN0> line 2.
Use of uninitialized value $kk in hash element at /usr/local/share/perl/5.22.1/Text/CSV/Hashify.pm line 359, <GEN0> line 2.
Use of uninitialized value $kk in hash element at /usr/local/share/perl/5.22.1/Text/CSV/Hashify.pm line 353, <GEN0> line 3.
Use of uninitialized value $kk in concatenation (.) or string at /usr/local/share/perl/5.22.1/Text/CSV/Hashify.pm line 354, <GEN0> line 3.
Key '' already seen at csv.pl line 13.

默认情况下,当我设置时:eol => 'rn',得到错误:'_ERROR_DIAG' => 'EOF - End of data in parsing input stream',

我的 CSV 有什么问题?

粗略查看模块后:
您指定了"asa"作为键,但您的数据缺少该字段。
这会导致:Key '' already seen at csv.pl line 13.

出现警告是因为您使用-w选项运行脚本(也因为模块作者没有处理未初始化的变量(。

通常,使用 no warnings 'uninitialized'; 来静音来自代码的预期警告(将其范围限定为所需的最小块(。

在这种情况下,警告来自您无法控制的模块代码(好吧,您可以修补它,但这当然应该避免(。
要缓解此问题,您可以:

  • 不要使用 -w 覆盖模块的警告级别,请使用 use warnings ,这仅适用于您的代码。
  • 带有
  • $SIG{__WARN__} = &handler_sub 的模块发出的陷阱警告(更多详细信息:perldoc perlvar -> %SIG (。 不过,这并不能保证适用于每个模块。

最新更新