我有像下面这样的数组。我想用Perl去除最后的工作。使用Perl删除字符串中的最后一个字
my @array = 'directory1/directory2/directory3/log_info.txt';
我想获得没有log_info.txt
的目录结构。
e.g要输出directory1/directory2/directory3/
感谢
我有像下面这样的数组。我想用Perl去除最后的工作。使用Perl删除字符串中的最后一个字
my @array = 'directory1/directory2/directory3/log_info.txt';
我想获得没有log_info.txt
的目录结构。
e.g要输出directory1/directory2/directory3/
感谢
Below line working for me.
$array =~ s/log_info.txt//g;
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/
我猜测OP并不意味着要创建一个单元素数组;我认为这是唯一使这个问题不是重复的[如何获得与Perl的文件的dirname?](http://stackoverflow.com/questions/3455956/how-do-i-get-the- dirname-of-a-file-with-perl),所以解释似乎是有保证的。另外,对于这个问题,我认为一个关于'dirname'的警告(尽管不适用于这个特殊情况)将会很有用,这个警告是根据[Schwern的回答](http://stackoverflow.com/a/3461953/176646)的线条来描述的。 – ThisSuitIsBlackNot 2014-08-28 19:19:15
有可能是一个更好的办法做到这一点,但这里是一个快速和肮脏的解决办法:
$/ = "log_info.txt";
chomp(@array);
会切断最后一部分。
另外,您可以使用正则表达式:
my ($dir) = @array[0] =~ /(.*)\/log_info.txt/;
为什么你的正则表达式输出为1? – 2014-08-28 19:01:56
我错过了'$ dir'周围的零件。固定。 – jkeuhlen 2014-08-28 20:21:27
为什么圆括号有所不同?你能解释一下原因吗?为什么你必须在这种情况下为变量使用圆括号? – 2014-08-28 23:52:55
这里是改变你的阵列中的每个项目的正则表达式的方法:
@array = map { s![^/]+$!!r } @array;
但是,在这种特殊情况下,我会用dirname
去。
你显示的是错误的。 '@ array'是一个数组,另一边是一个字符串。 – Jens 2014-08-28 18:47:22
@Jens不会只是创建一个项目的数组?我同意OP可能想要使用'$ array'。 – jkeuhlen 2014-08-28 18:50:25