我有如下的数组。我想使用Perl删除它的最后一项工作。
my @array = 'directory1/directory2/directory3/log_info.txt';
我希望获得没有log_info.txt
的目录结构。
例如想要输出directory1/directory2/directory3/
由于
答案 0 :(得分:2)
File::Basename是一种使用Perl解析文件路径的传统且可移植的方法。
use warnings;
use strict;
use File::Basename qw(dirname);
my @array = 'directory1/directory2/directory3/log_info.txt';
for (@array) {
print dirname($_), "/\n";
}
__END__
directory1/directory2/directory3/
答案 1 :(得分:0)
可能有更好的方法可以做到这一点,但这是一个快速而肮脏的解决方法:
$/ = "log_info.txt";
chomp(@array);
将切断最后一部分。
或者你可以使用正则表达式:
my ($dir) = @array[0] =~ /(.*)\/log_info.txt/;
答案 2 :(得分:0)
以下是更改数组中每个项目的正则表达方式:
@array = map { s![^/]+$!!r } @array;
但在这种特殊情况下,我会选择dirname
。
答案 3 :(得分:0)
Below line working for me.
$array =~ s/log_info.txt//g;