Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Perl哈希中表示文件系统的符号链接?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在服务器故障,How to list symbolic link chains?(不是我的问题)谈论列出所有符号链接并跟随它们.为了使这个可行,我们首先虑一个目录.

我想写一个实用程序的简短实用程序.将符号链接中的对放入哈希中然后处理哈希看起来很容易.

但后来我可能有类似的东西:

ls -l
@R_784_10586@l 0
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 a -> b
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 b -> c
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:03 c -> a
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:17 trap -> b
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:17 x -> y
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:17 y -> b

很明显a-> b-> c是一个循环,并且该陷阱指向一个循环,但要知道x指向一个循环,我需要跟随一点.

一个哈希表示是:

a => b
b => c
c => a
trap => b
x => y
y => b

但是一旦我知道循环是什么,反向表示更好地将循环标记为坏起点.

所以这里有一些问题:

>哈希是表示符号链接的最佳结构吗?
>什么是分离文件系统图形以将循环组件从树组件分配到具有循环类型片段的树枝的最佳方法?
>是否有比从所有起点手动搜索所有循环更好的算法?
>从图论理论的角度来看 – CPAN中的这种事情已经存在了吗?如果没有,有什么好帮手模块?

解决方法

您可以在CPAN上使用 Graph模块,如下所示:
#! /usr/bin/perl

use warnings;
use Strict;

use Graph;

my $g = Graph->new;
my $dir = @ARGV ? shift : ".";

opendir my $dh,$dir or die "$0: opendir $dir: $!";
while (defined(my $name = readdir $dh)) {
  my $path = $dir . "/" . $name;

  if (-l $path) {
    my $dest = readlink $path;
    die "$0: readlink $path: $!" unless defined $dest;

    $g->add_edge($name => $dest);
  }
  else {
    $g->add_vertex($Name);
  }
}

my @cycle = $g->find_a_cycle;
if (@cyclE) {
  $" = ' -> '; #" # highlighTing error
  print "$0: $dir: at least one cycle: @cycle\n";
}
else {
  print "$0: $dir: no cycles\n";
}

例如,在与您的问题中的结构类似的目录中,输出是

$../has-cycle 
../has-cycle: .: at least one cycle: c -> a -> b

大佬总结

以上是大佬教程为你收集整理的如何在Perl哈希中表示文件系统的符号链接?全部内容,希望文章能够帮你解决如何在Perl哈希中表示文件系统的符号链接?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。