use IO::File; use Data::Dumper; my $f = new IO::File "file.txt", "r" or die "Can not open file"; my @vars; while (<$f>) { my ($d, $t) = $_ =~ /^(\d+)\|\|(\w+)$/; push @vars, { num => $d, txt => $t }; } print Dumper(\@vars);