foreach循环遍历具有目录路径和文件名的数组(perl)

时间:2013-05-29 14:41:10

标签: perl

1440665    8 drwxrwx---   2 smithjoe   smithjoe      1024 May 29 09:01 .
1960596    8 -rwxrwx--x   1 smithjoe   smithjoe      3190 May 29 09:00 ./file1.prl
3197096    8 -rw-rw----   1 smithjoe   smithjoe      1594 May 24 16:11 .dir/documents/file2.prl~
1790401    8 -rw-------   1 smithjoe   smithjoe      3205 May 29 09:01 .dir/files/file3.prl
6754401    8 -rw-------   1 smithjoe   smithjoe      3205 May 29 09:01 .smithjoe/file3.prl
2737401    8 -rw-------   1 smithjoe   smithjoe      3205 May 29 09:01 .smithjoe/folder2

我有一个数组(@file_path),其中包含上面显示的数据。我希望能够从数组中提取文件/目录名称(它是该行的最后一个元素)。我必须使用foreach循环。一旦我这样做。我跳过目录并将它们保存在一个新数组中。我使用push命令附加该数组。

帮帮我。请。

2 个答案:

答案 0 :(得分:2)

给你一些提示:

  • 假设文件路径永远不会包含空格,您可以使用split命令分隔每行上的字段并将它们分配给数组。如果它们可以包含空格,split会为要返回的最大字段数采用可选的第三个参数。

  • 在Perl中,$array[-1]会返回@array中的最后一项。

这两个提示应该允许您从每一行获取文件路径。

答案 1 :(得分:2)

我会重新讨论@ mpapec的评论,你可能想先通过修复你得到的数据来解决这个问题,而不是试图操纵它。另外,我需要在文件名和路径内的空格上加上这个前缀 - 而且我不确定是否有一种好的,可靠的方法来避免不引入其他怪癖,因此建议修复尝试处理之前的数据。

但是,如果您对所拥有的数据感到困惑,并且您确信在文件名/路径中不会有空格:

my @paths;
foreach my $line (@file_path) {
    my @parts = split /\s+/, $line;
    push @paths, $parts[-1];
}

......应该让你上路。