如何解决Perl中的符号链接?

PJ.*_*PJ. 3 perl symlink

我有一个符号名称javajrejre1.5jre1.6java1.5java1.6,它们将指向相应的目录.考虑到第一个例子,它看起来像:

   java -> /usr/java/jdk1.5.x.x
Run Code Online (Sandbox Code Playgroud)

我的目标如下:

  1. 检查符号是否存在
  2. 获取它指向的目录的值
  3. 使用正则表达式而不是在代码中使用if-else语句.

链接将在/ usr/tmp中.

我在Perl中编写了一些代码,如下所示:

 $filename = "/usr/local/java";
 if (-l $filename) {
        print "File exists \n";
 } else {
        print "Not \n";
 }
Run Code Online (Sandbox Code Playgroud)

但是如果java不存在而且存在java1.4java1.5,我想搜索哪个应该以java开头并且是符号链接.

此外,我需要获取它指向的目录.请告知如何继续.

Mic*_*rny 10

首先,您确定不想使用${JAVA_HOME}环境变量吗?

您可以使用内置readlink()函数读取符号链接目标.

要检查其他可能性,您可以对它们进行硬编码并逐个检查是否存在,使用opendir()/ readdir()builtins或objective IO::Dir查找目录中的所有符号链接并检查它们是否匹配或模式,甚至glob()可以在您的情况下更简单的功能.


Moh*_*amy 8

use Cwd 'abs_path';

$absFilePath = abs_path("$linkPath") ;
Run Code Online (Sandbox Code Playgroud)