从Perl';获取文件路径;。rc';文件

从Perl';获取文件路径;。rc';文件,perl,dynamic,path,rc,Perl,Dynamic,Path,Rc,所以我有一个Perl.rc文件(我们用Perl语法称它为'path.rc'),它有以下几行: $RC{model_root} = '/nfs/fm/disks/fm_fabric_00011/abc_rel//xy/xy-abc1-15aa05e' 我需要从目录'xy-abc1-15aa05e'中获取文件。我不应该在我的Perl文件中硬编码这个路径(让我们称之为'Fetch.pl'),因为路径可能会频繁更改,所以会维护一个单独的.rc文件。我正在使用: my $model_root = $R

所以我有一个Perl.rc文件(我们用Perl语法称它为'path.rc'),它有以下几行:

$RC{model_root} = '/nfs/fm/disks/fm_fabric_00011/abc_rel//xy/xy-abc1-15aa05e' 
我需要从目录
'xy-abc1-15aa05e'
中获取文件。我不应该在我的Perl文件中硬编码这个路径(让我们称之为
'Fetch.pl'
),因为路径可能会频繁更改,所以会维护一个单独的.rc文件。我正在使用:

my $model_root = $RC{model_root}; 
在我的Perl代码中链接到路径(类似于在rc文件中链接到路径的参数)。现在如何打开目录“xy-abc1-15aa05e”中的文件?我的Perl文件无法获取路径:(


这破坏了我的其余代码…我如何才能做到这一点?

如果您将“rc”文件设置为以下Perl模块:

下午二时三十分

package Defs;

our $path = '/nfs/fm/disks/fm_fabric_00011/abc_rel//xy/xy-abc1-15aa05e';

1;
然后您可以-在脚本中:

#Ensure we can 'find' the defs file, by having a library path that's relative to
#the script location.
use FindBin;
use lib $FindBin::Bin;

use Defs;

print $Defs::path, "\n";
如果您特别需要使用您列出的格式,那么您需要处理文件的内容。一种方法是使用
eval
。但除非绝对必要,否则我不太喜欢这样做

不过,您可以这样做:

use Data::Dumper;

open ( my $rcfile, "<", 'rcfile' ) or die $!;
my %RC;
eval <$rcfile>;

print Dumper \%RC;

要回答这个问题,需要大量信息,但是如果您有一个设置文件,那么您可能应该使用一个正确的序列化格式。因此,在高层,这个“.rc”文件有一个路径,我正试图从我的perl代码中获取/访问该路径,以打开位于该路径中的文件。perl文件无法访问要访问它,“.rc”文件只有一行:$rc{model_root}='/nfs/fm/disks/fm_fabric_00011/abc_rel//xy/xy-abc1-15aa05e'.rc文件必须包含特定的内容吗?不,.rc文件不需要任何特定的格式或任何东西。它看起来就是这样:$rc{model_root}='/nfs/fm/disks/fm_fabric_00007/psf2_releases//ip/ip-psf2-15ww05e'1;在示例中使用正则表达式时,$value必须具有完整的路径('/nfs/fm/disks/fm_fabric_00011/abc_rel//xy/xy-abc1-15aa05e'),对吗?从这里,我需要进入dir:'/xy-abc1-15aa05e'并打开文件。你认为我必须在那里使用另一个while循环和模式匹配吗?是的,这就是提取到
$value
中的内容。将其作为目录处理,并
glob
它:
用于每个我的$file(glob“$value/*”){
示例中的正则表达式方法非常有用!(输出:用/prod做某事用/proj做某事)我现在可以连接到目录“xy-abc1-15aa05e”并查看其中的文件。我应该能够使用常规的文件打开和处理代码来读取这些文件,对吗?是的。所有常用的打开/关闭/读取选项都可以工作。“glob”的优点之一是它返回完整的文件路径。(opendir没有)@Sobrique..我对得到的输出感到困惑..我今天尝试更改rc文件中的路径,但得到了相同的打印消息:“使用$file做点什么\n”使用相同的目录名。仔细看,我认为正在获取路径每一级的目录,而不是上一个目录中的文件。也就是说,对于“/nfs/fm/disks/fm_fabric_00011/abc_rel//xy/xy-abc1-15aa05e”,我只希望读取“xy-abc1-15aa05e”中的文件,但代码正在打开每个目录中的文件和目录级别:/nfs../fm../disks..等。您知道如何避免这种情况吗?
my $model_root;
while ( <$rcfile> ) {
   my ( $varname, $value ) = ( m/\A(\S+) = \'(\S+)\'/ );
   if ( $varname eq '$RC{model_root}' ) { $model_root = $value; }
}

print $model_root;
foreach my $file ( glob "$model_root/*" ) {
    print "Doing something with $file\n";
}