Вы можете разбить строку на массив и напечатать два последних элемента
use strict;
use warnings;
use feature 'say';
while(<DATA>) {
my @data = (split ' ')[5,6];
say join ' ', @data;
}
__DATA__
00000000000 00000000 0 MMM_WR 0 000004 00000abc
00000000000 00000000 0 MMM_WR 0 000008 0000000c
Выход
000004 00000abc
000008 0000000c
Другой вариант с соответствием регулярному выражению
use strict;
use warnings;
use feature 'say';
while (<DATA>) {
my @data;
@data = $_ =~ /MMM_WR\s+\d\s+(\d{6})\s+(.+)/;
say join ' ', @data;
}
__DATA__
00000000000 00000000 0 MMM_WR 0 000004 00000abc
00000000000 00000000 0 MMM_WR 0 000008 0000000c
Выход
000004 00000abc
000008 0000000c
Интересующие данные могут быть извлечены с помощью распаковки
use strict;
use warnings;
use feature 'say';
while (<DATA>) {
my @data = (unpack("A45A6A12A8",$_))[1,3];
say join ' ', @data;
}
__DATA__
00000000000 00000000 0 MMM_WR 0 000004 00000abc
00000000000 00000000 0 MMM_WR 0 000008 0000000c
Вывод
000004 00000abc
000008 0000000c
Изменение с использованием 'substr'
use strict;
use warnings;
use feature 'say';
while (<DATA>) {
my @data;
$data[0] = substr $_, 45, 6;
$data[1] = substr $_, 63, 8;
say join ' ', @data;
}
__DATA__
00000000000 00000000 0 MMM_WR 0 000004 00000abc
00000000000 00000000 0 MMM_WR 0 000008 0000000c
Вывод
000004 00000abc
000008 0000000c