use strict; use warnings; my $input = <) { chomp; next unless length; my ($number, $port) = split ','; my @digits = split '', $number; my $node = \%tree; for my $digit (@digits) { last if $digit eq '.'; if (exists $node->{$digit}) { $node = $node->{$digit}; next; } $node = $node->{$digit} = {}; } $node->{port} = $port; } # Process input numbers open my $inFile, '<', \$input or die "Failed to open input file: $!"; while (defined (my $number = <$inFile>)) { chomp $number; my @digits = split '', $number; my $node = \%tree; for my $digit (@digits) { last unless exists $node->{$digit}; $node = $node->{$digit}; } print "$number---port$node->{port}\n"; } __DATA__ 56..,1 567.,2 5...,x #### 5600---port1 5679---port2 5700---portx