0
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 命令附加该数组。

帮帮我。请。

4

2 回答 2

2

给你几个提示:

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

  • 在 Perl 中,$array[-1]返回@array.

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

于 2013-05-29T14:54:20.893 回答
2

我会重申@mapeec 的评论,您可能希望首先通过修复您输入的数据来解决这个问题,而不是试图操纵它。另外,我需要在前面说这会阻塞文件名和路径中的空格——我不确定是否有一种好的、可靠的方法来避免不会引入其他怪癖的方法,因此建议修复尝试处理数据之前的数据。

但是,如果您坚持使用现有数据,并且确信文件名/路径中不会有空格:

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

...应该让你上路。

于 2013-05-29T14:58:35.060 回答