因此,我试图拆分具有完整路径到目录的变量时遇到问题。我想获取这个路径的'logs'目录下的文件: '/ nfs/fm/disks/fm_mydiskhere_00000/users/me/repotest/myrepo/tools/toolsdir/logs/*';Perl:将包含路径的变量拆分到目录
在我的Perl脚本中,我有一个包含这个路径的变量:'$ log_file'。当我打印'$ log_file'时,它包含整个路径;我想要转到最后一个目录'logs'并获取它下面的文件。顺便说一句,这个完整路径是正由我的Perl脚本读取一个单独的配置文件是这样的:
sub read_file {
my ($log_file) = shift(@_);
info ("Using file : $log_file");
my $fh = new FileHandle ("$log_file");
printError ("Could not open this file : '$log_file' - $!") unless defined $fh;
my $contents;
{
local $/ = undef;
$contents = <$fh>;
}
$fh->close();
eval $contents;
if ([email protected]) {
chomp [email protected];
my $msg = "BAD (perl) syntax in file:\n\[email protected]\n";
if ($msg =~ /requires explicit package name/) {
$msg .= "\n -> A 'requires explicit package name' message means".
" a NON-VALID variable name was found\n";
}
die "Error: $msg\n\n";
}
return 1;
}
而且我使用变量$ LOG_FILE在另一个子程序中这样说:
my $fh = read_file ($log_file);
if ($log_file eq "abc.txt"){
while (my $line = <$fh>) {
#do something
}
}
请问有人可以帮我吗?我错过了什么或以错误的方式使用$ log_file?
在此先感谢!
我猜'FileHandle'不能接受通配符。这很有意义,因为文件句柄是单个文件的句柄。尝试将单个文件的路径分配到'$ log_file'中,并查看是否可以缓解您的问题。 – wilkesybear 2015-02-23 23:55:00
我明白你的观点..但是在'/ logs'目录下,有几个文件,我根据它的名字对每个文件执行不同的操作。 $ log_file正在读取整个路径('/ nfs/fm/disks/fm_mydiskhere_00000/users/me/repotest/myrepo/tools/toolsdir/logs/*';),我不知道如何让它读取文件最后的'/ logs'目录。 – chmod 2015-02-23 23:59:29
如何使用[readdir](http://perldoc.perl.org/functions/readdir.html)首先迭代每个文件名,然后将所有逻辑放入该循环中?这是另一个堆栈溢出问题/答案,可能有助于http://stackoverflow.com/questions/6442889/perl-iterate-through-directories/6443023#6443023 – wilkesybear 2015-02-24 00:16:02