http://qs321.pair.com?node_id=753493

grashoper has asked for the wisdom of the Perl Monks concerning the following question:

I was looking to insert keys into a hash so that I can import some data from existing datafiles into a db, I was planning on using keys which would match the columnames in the database and the values would of course be what is entered into the columns, I am using odbc for my data connection and have existing data which consists of a date+timestamp followed by several times, for tests conducted on websites. so my keys should be {stamp}{login}{search} etc.. and my values would be like 01/01/2008 12:34 PM, 20.5, 19.6 etc. problem is it doesn't seem to like my attempt to load the keys , and then afterwards its going to kill my data when I go to assign the hash to the contents of the file, I guess I could get around this using join, and storing data from the file into an array, but I am still kinda stuck on how to pull this off.
%hash = split /\,/,<FILE>; @labels=qw(Date,Login,Searchload,Searchsave,Searchdetails,Searchdelete +); unshift(%hash)=(@labels);

Replies are listed 'Best First'.
Re: insert into a hash
by kyle (Abbot) on Mar 26, 2009 at 20:05 UTC

    From your description, I wrote this:

    my %hash; my @labels = qw(Date,Login,Searchload,Searchsave,Searchdetails,Searchd +elete); while ( my $line = <FILE> ) { chomp $line; my @fields = split /,/, $line; foreach my $label ( @labels ) { push @{ $hash{ $label } }, shift @fields; } }

    You might want to consider using Text::CSV_XS. And, as always, Use strict and warnings.

      From the statement
          my @labels = qw(Date,Login,Searchload,Searchsave,Searchdetails,Searchdelete);
      the array  @labels contains only a single element, the string 'Date,Login,Searchload,Searchsave,Searchdetails,Searchdelete'.
      >perl -wMstrict -le "my @ra = qw(a,b,c); print scalar @ra; print qq{'@ra'}; " Possible attempt to separate words with commas at -e line 1. Possible attempt to separate words with commas at -e line 1. 1 'a,b,c'
      The use of warnings and strictures is a very good idea.