我有如下所示的数组。我想使用 Perl 从中删除最后的工作。
my @array = 'directory1/directory2/directory3/log_info.txt';
我想获取没有
log_info.txt
的目录结构。
例如想要输出
directory1/directory2/directory3/
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";
}
输出:
directory1/directory2/directory3/
这是更改数组中每个项目的正则表达式方法:
@array = map { s![^/]+$!!r } @array;
但在这种特殊情况下,我会选择
dirname
。
可能有更好的方法来做到这一点,但这里有一个快速但肮脏的修复:
$/ = "log_info.txt";
chomp(@array);
将剪掉最后一部分。
或者你可以使用正则表达式:
my ($dir) = @array[0] =~ /(.*)\/log_info.txt/;
Below line working for me.
$array =~ s/log_info.txt//g;