Symlink.pm 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package NIC::NICBase::Symlink;
  2. use strict;
  3. use warnings;
  4. use parent qw(NIC::NICType);
  5. use Scalar::Util qw(refaddr);
  6. use overload '""' => sub {
  7. my $self = shift;
  8. my $ref = ref($self);
  9. $ref =~ s/^.*::(\w+)$/$1/g;
  10. my $target = (ref($self->target) && refaddr($self) == refaddr($self->target)) ? "itself" : "\"".$self->target."\"";
  11. return '"'.$self->name."\" ($ref to $target)";
  12. };
  13. sub _take_init {
  14. my $self = shift;
  15. $self->{TARGET} = shift // undef;
  16. }
  17. sub type {
  18. my $self = shift;
  19. return NIC::NICType::TYPE_SYMLINK;
  20. }
  21. sub target {
  22. my $self = shift;
  23. if(@_) { $self->{TARGET} = shift; }
  24. return $self->{TARGET};
  25. }
  26. sub target_type {
  27. my $self = shift;
  28. my $t = $self->{TARGET};
  29. return ref($t) ? $t->type : NIC::NICType::TYPE_UNKNOWN;
  30. }
  31. sub target_name {
  32. my $self = shift;
  33. my $t = $self->{TARGET};
  34. return ref($t) ? $t->name : $t;
  35. }
  36. sub create {
  37. my $self = shift;
  38. my $name = $self->{OWNER}->substituteVariables($self->{NAME});
  39. my $dest = $self->{OWNER}->substituteVariables($self->target_name);
  40. symlink($dest, $name) or return 0;
  41. return 1;
  42. }
  43. 1;