-e 'oldlink' and unlink 'oldlink';
symlink 'yourfile', 'oldlink' or die "oldlink: $!";
If my understanding of unlink(2) and symlink(2) is correct either one
would fail or both. Anyway there's race, so:
unlink 'oldlink;
symlink 'yourfile', 'oldlink' or die $!;
Then what's wrong with that:
#/usr/bin/perl
use strict;
use warnings;
use File::Temp qw|tempfile|;
use File::Basename;
my ($link, $yourfile) = ( @ARGV );
my ($fd, $fn) = ( dirname($link), basename $link );
my($fh), $fn = tempfile "$fn.XXXXXX", DIR => $fd;
unlink $fn or die "unlink: $!";
symlink $yourfile, $fn or die "symlink: die $!";
close $fd;
rename $fn, $link or die "rename: $!";
__END__
Did I really needed to keep I<$fn> open?