【发布时间】:2015-10-28 10:12:11
【问题描述】:
您好,这里是我正在开发的一个非常大的 perl 程序的一个小片段,但是我相信这个部分是错误的。
my $headd = "test,test1,test2,test3,ect";
my @headers = split(',', $headd);
CONNECT TO DATABASE STUFF THAT WORKS FINE
my %column_mapping = (
"GPS ALT" => 'GPS_ALT',
"GPS DTS" => 'GPS_DTS',
"GPS FIX" => 'GPS_FIX',
"GPS HDG" => 'GPS_HDG'
)
my $sql = sprintf 'INSERT INTO tablename ( %s ) VALUES ( %s )',
join( ',', map { $column_mapping{$_} } @$headers ),
join( ',', ('?') x scalar @$headers ); # note the list around the '?'
由于我对 perl 还很陌生,如果我不得不猜测我会在这里说它
join( ',', map { $column_mapping{$_} } @$headers ),
join( ',', ('?') x scalar @$headers );
我认为我的标题或其他内容的数据类型错误,但我不完全确定问题出在哪里,它只是在这些行周围崩溃。
如果你碰巧看到我做错了什么,那就太好了:)
【问题讨论】:
-
您是否启用了
use strict;?如果是这样,您应该得到Global symbol "$headers" requires explicit package name,因为您在顶部声明了数组@headers,但从未声明您尝试在map { ... } @$headers中使用的数组引用$headers。 -
“崩溃”是什么意思?
-
@ThisSuitIsBlackNot 是的,我确实启用了它,我明白了。我不确定如何正确使用地图 {...}@$headers。我是否遗漏了申报行或使用地图错误?
-
将
@$headers更改为@headers。@headers是一个数组;@$headers取消引用您从未声明过的数组 reference$headers。 -
程序员技能中的一个重要工具是准确性。我怀疑您的意思是“未初始化”而不是“已初始化”。请在报告您所看到的内容时更加小心,否则我们将无法为您提供帮助。如果您的
map中有一个未初始化的值,那么我希望$headd包含在%column_mapping中不作为键存在的值。