#!/usr/bin/perl use strict; use warnings; @ARGV == 1 and -f $ARGV[0] or die "Usage: $0 list-file-name\n"; my %files; while (<>) { chomp; next unless ( m:^(.+/)(.+?)#(\d+)$: ); my ( $path, $name, $version ) = ( $1, $2, $3 ); push @{ $files{ $name }}, { p => $path, v => $version }; } open( my $glf, ">", "hash_glf.txt" ) or die "hash_glf.txt: $!\n"; for my $f ( keys %files ) { print $glf join( "\n ", $f, map { "$$_{p}\t$$_{v}" } @{$files{$f}} ), "\n\n"; }