in reply to arranging the csv file

Probably should use Text::CSV to parse the data, but in this case cheating isn't too bad:

use strict; use warnings; my %data; map {$data{0+$_ =~ s/[ ,].*\n?//r} = $_} <DATA>; print $data{0+$_} for qw( 10.1 100.1 25.1 103.1 ); __DATA__ 100.1,A ,25, 36,56,89,45,36,56 25.1 ,B,232,565,65,56,56,48,25 103.1,C,25,5,6,9,4,5,56,889,9 10.1,D,5,6,5,8,9,8,12,23,36,6

You'd still have to account for duplicate entries and such

Replies are listed 'Best First'.
Re^2: arranging the csv file
by 2teez (Vicar) on Jul 24, 2013 at 05:59 UTC

    Hi Loops,
    Nice concept of solution, but you are "throwing" away the return values of the map function, so really, I wouldn't build my hash data like this. Moreover, this method is throwing a warnings Argument "\n" isn't numeric in addition ...
    I would rather do like so:

    use strict; use warnings; my %data; while(<DATA>){ my ($key,$value) = split/\s+|,/=>$_,2; $data{$key} = $value; } print $_,',',$data{0+$_},$/ for qw( 10.1 100.1 25.1 103.1 ); __DATA__ 100.1,A ,25, 36,56,89,45,36,56 25.1 ,B,232,565,65,56,56,48,25 103.1,C,25,5,6,9,4,5,56,889,9 10.1,D,5,6,5,8,9,8,12,23,36,6

    If you tell me, I'll forget.
    If you show me, I'll remember.
    if you involve me, I'll understand.
    --- Author unknown to me

      Marrying your and Loops' approach:

      use strict; use warnings; my %data = map { /(.*?)\s*,/ => $_ } <DATA>; print @data{ qw( 10.1 100.1 25.1 103.1 ) }; __DATA__ 100.1,A ,25, 36,56,89,45,36,56 25.1 ,B,232,565,65,56,56,48,25 103.1,C,25,5,6,9,4,5,56,889,9 10.1,D,5,6,5,8,9,8,12,23,36,6

      Question: can anyone do this as a oneliner without a named hash?