我有一个Perl脚本,在其中我给出了目录的路径作为输入。目录中包含xml文件。
在我的代码中,我遍历所有xml文件并为所有xml文件创建绝对路径。代码运行正常。
#!/usr/bin/perl
use File::Spec;
$num_args = $#ARGV + 1;
if ($num_args != 1) {
print "\nUsage: $0 <input directory>\n";
exit;
}
my $dirPath = $ARGV[0];
opendir(DIR, $dirPath);
my @docs = grep(/\.xml$/,readdir(DIR));
foreach my $file (@docs)
{
my $abs_path = join("",$dir,$file);
print "absolute path is $abs_path";
}
我在这里的问题是,在没有分隔符的情况下连接$ dirPath和$ file意味着$ dirPath必须以“ /”结尾。因此,在perl中是否有任何方法或内置函数可以照顾这种情况并替换join方法。
我想要的只是不要担心分隔符“ /”。即使使用“ / test / dir_to_process”或“ / test / dir_to_process /”路径调用脚本,我也应该能够为存在的所有xml文件生成正确的绝对路径,而不必担心分隔符。
让我知道是否有人有任何建议。
请注意您的建议。当对先前帖子的评论和答案被忽略时,不停地提出问题是荒谬的。
你必须始终 use strict
和use warnings
在顶部每个你写Perl程序,并使用声明每个变量my
。这并不难,如果发布的代码没有采取这些措施,您将受到谴责。
你use
在File::Spec
你的程序模块,但从来没有使用它。通常File::Spec::Functions
,它更容易使用,因为它导出了提供的方法,File::Spec
因此无需使用面向对象的调用样式。
catfile
将正确将文件(或目录)名称连接到路径,如果路径分隔符不正确,则会做正确的事情。程序的这种重写工作正常。
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions 'catfile';
if (@ARGV != 1) {
print "\nUsage: $0 <input directory>\n";
exit;
}
my ($dir_path) = @ARGV;
my $xml_pattern = catfile($dir_path, '*.xml');
while ( my $xml_file = glob($xml_pattern) ) {
print "Absolute path is $xml_file\n";
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句