我有像下面這樣的數組。我想用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