#!/usr/bin/perl use strict; use warnings; my %chain; # read the chain: while (){ chomp; my ($key, $val) = split m/ \| /; push @{$chain{$key}}, $val; } # walk the chain starting from 12: walk(12); sub walk { my $c = shift; print "Visiting $c\n"; for (@{$chain{$c}}){ walk($_); } } __DATA__ 23 | 32 12 | 45 12 | 35 12 | 67 45 | 34 34 | 90 34 | 55 35 | 53 35 | 44 44 | 41