use strict; use warnings; my @lines = ( '3 | 1853 1239 293 293 293 293 293 293 292', '5 | 1853 1239 293 293 293 293 293 293 3428' ); foreach my $line ( @lines ) {   my ( $id, $path ) = split /\s+\|\s+/, $line, 2;     $path = join ' ', unique( split / /, $path );   print "$id | $path\n"; } sub unique {    my %h = ();    return grep { !$h{$_}++ } @_; }