use Modern::Perl; while () { my ( $date, $msisdn, $ud, $trxtime, $response ) = map { /:([^:]+)/ ? $1 : $_ } ( split /[\s+,]/ )[ 0, 6, 7, 8, 11 ]; say join ',', $date, $msisdn, $ud, substr( $trxtime, 0, 8 ), $response; } __DATA__ 06.02.2013 12.24.01:909 5807225321 INFO {EXT:httpadapter:17:14:}[0]RULEZ [HTTPADAPTER],msisdn:637584930382,ud:Pan,trxtime:20130206122401 ResponseDeltaTime:31 ms ResponseCode:200 ResponseBody:OK