#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %hash; open my $fh, '<', $ARGV[0] or die "could not open $ARGV[0]'' $!"; while (my $line = <$fh>) { my $key= $line =~/;(.*)\s-\s/; #match anything between ; and - is key my $value= $line =~/\.\\(.*)-\d+\;/; #match anything between .\ and - is value $hash{$key}=$value; } print Dumper(\%hash);