in reply to Longest match finding.

If you are building this stuff at run time then some sort of decision tree is probably the best technique. I'd be inclined to use a nested hash. Consider:

use strict; use warnings; my $input = <<INPUT; 5600 5679 5700 INPUT # Build the tree my %tree; while (<DATA>) { 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

Prints:

5600---port1 5679---port2 5700---portx

Perl's payment curve coincides with its learning curve.