ls -l </ p>
-rw-r--r-- 1 angus angus 0 2013-08-16 01:33 copy.pl
-rw-r--r-- 1 angus angus 1931 2013-08-16 08:27 copy.txt
-rw-r--r-- 1 angus angus 492 2013-08-16 03:15 ex.txt
-rw-r--r-- 1 angus angus 25 2013-08-16 09:07 hello.txt
-rw-r--r-- 1 angus angus 98 2013-08-16 09:05 hi.txt
我只需要读取,写入,访问数据以及文件名。
#! /usr/bin/perl -w
@list = `ls -l`;
$index = 0;
#print "@list\n";
for(@list){
($access) = split(/[\s+]/,$_);
print "$access\n";
($data) = split(/pl+/,$_);
print "$data";
@array1 = ($data,$access);
}
print "@array1\n"
我编写了这段代码来提取读取,写入,访问权限详细信息以及与之对应的文件名。 我无法提取最后一列的文件名。
答案 0 :(得分:7)
检查perl stat
http://perldoc.perl.org/functions/stat.html
它比调用外部ls
命令
use File::stat;
$sb = stat($filename);
printf "File is %s, size is %s, perm %04o, mtime %s\n",
$filename, $sb->size, $sb->mode & 07777,
scalar localtime $sb->mtime;
答案 1 :(得分:2)
我认为您的脚本第8行有错误。您正在尝试使用字符串“pl”作为分隔符来分割行,该分隔符仅与输入的第一行匹配,并且不会为您提供我想要的内容。
我相信你应该在白色空间上分割整行并只分配你想要的列(在这种情况下为1和8)。
为此改变你的循环:
for my $filename (@list){
chomp($filename);
my ($access, $data) = (split(/\s+/, $filename))[0, 7]; #use a slice to get only the columns you want.
print "$access $data\n";
}
注意: mpapec建议使用Stat会更好。我只是想让你知道为什么你的代码无效。