http://www.perlmonks.org?node_id=993911


in reply to finding the field number of a matching pattern in perl

anonymous's split : the better ones. mine ... not so good.

use strict; use warnings; use Data::Dumper; use 5.010; my $data = "Region day Item volume Month district piece amount day ... + one more test"; print "$data\n"; my (@sep); push @sep, 0; push @sep, $-[0] while( $data =~ /\s+/g ); push @sep, length($data); while( $data =~ /Item|volume|day|test/g ){ #printf "%s|%s|%s,matched pos=%s\n", $`,$&,$',$-[0]; my $match_bgn = $-[0]; for( my $idx=0 ; $idx < $#sep; $idx ++){ # printf "match pos=%d, %d .. %d\n" #,$match_bgn ,$sep[$idx] ,$sep[$idx+1]; if( $match_bgn > $sep[$idx] && $match_bgn < $sep[$idx+1]) { print "col of $&=$idx\n"; } } } __DATA__ Region day Item volume Month district piece amount day ... one more te +st col of day=1 col of Item=2 col of volume=3 col of day=8 col of test=12