#!/usr/bin/perl use warnings; no warnings 'uninitialized'; use strict; use File::Spec qw(rel2abs); use File::Basename; chaselink($ARGV[0]); sub chaselink { my %seen = (); my $chase; $chase = sub { my($f,$d)=@_; print "\nChasing link '$f' in '$d'\n"; my $l = readlink($f); if (!defined($l)) { print "$f is not a link.\n"; return undef; } print "Relative link: $l from $d\n"; my $a = File::Spec->rel2abs($l,$d); print "Absolute link: $a\n"; if ($seen{$a}) { print "Found loop, giving up\n"; return undef; } $seen{$a}=1; $chase->($a,dirname($a)); }; $chase->(@_); }