in reply to Another Pattern Matching Question
Here's a splitting and unpacking option for your data set that puts the desired elements into an array:
use Modern::Perl; for ( grep /\S/, <DATA> ) { my @data = ( split /\./ )[ 0 .. 3 ]; splice @data, 1, 1, unpack '(a4)(a2)*', $data[1]; say "@data"; } __DATA__ 3B40RT.2000033121.7.bin.gz 3B40RT.2000033121.7R.bin.gz 3B40RT.2000033121.7RWER.bin.gz
Output:
3B40RT 2000 03 31 21 7 bin 3B40RT 2000 03 31 21 7R bin 3B40RT 2000 03 31 21 7RWER bin
|
|---|