#!/usr/bin/perl -w

# I wrote this silly script to find the most efficient way to examine
# the Path header looking for a bad site.
# The break even point is at about 6 or 7 bad sites to check in the path.
# It's one or two elements higher when checking a very short path.
#
# Conclusions:
# splitting the path and checking it with the for loop is worth it.

use strict;

my $path = 'wonderland.linux.it!bofh.it!kirk.uli.it!newsfeed.cineca.it!newsserver.cilea.it!newsmi-eu.news.garr.it!newsrm.news.garr.it!NewsITBone-GARR!news.unina.it!studenti.unina.it!falemagna';

my @check = qw( optus news1.rivrw1.nsw.optushome.com.au.POSTED gts news.unitel.co.kr ns.sampanet.gr.jp netnews.hinet.net news.vcd.cl ); #kaktus.farlep.net news.ukr.net news.reimliga.de );

my $check1 = join('|', @check);
$check1 =~ s/\./\\./;

my %check2 = map { $_ => 1 } @check;

#timethese(1000000, {'uno' => &match1, 'due' => &match2, }); exit 0;

for (my $i = 0; $i < 1000; $i++) {
	print "ERR\n" if match1();
}

for (my $i = 0; $i < 1000; $i++) {
	print "ERR\n" if match2();
}

exit 0;

sub match1 {
	return 1 if $path =~ /$check1/o;
	return 0;
}

sub match2 {
	my @p = split(/!/, $path);
	foreach (@p) {
		return 1 if exists $check2{$_};
	}
	return 0;
}


syntax highlighted by Code2HTML, v. 0.9.1