当我用perl打印时,为什么新行上有0?

时间:2016-04-01 13:46:21

标签: perl

我试图单独获取一个作为参数传递的文件的inode。

但是,当我提取inode时,新行上会打印出0。我试图用正则表达式来摆脱它,但我不能。我正在传递脚本/usr/bin/vim当我运行命令(ls -i /usr/bin/vim | awk '{print $1}')时,0不在那里,但是当我运行脚本时。

我怎样才能摆脱这个0?

my $filepath = $ARGV[0];
chomp $filepath;
$filepath =~ s/\s//g;

print ("FILEPATH: $filepath\n"); #looks good
my $inode = system("ls -i $filepath | awk '{print \$1}'");

$inode =~ s/[^a-zA-Z0-9]//g;
$inode =~ s/\s//g;
print ("$inode\n");

所以我的结果是

137699967
0

2 个答案:

答案 0 :(得分:3)

当您调用Queue时,您运行作为其参数提供的命令,以及输出inode编号的内容。

system的返回值是命令运行的退出代码,在这种情况下为0,这是您后续system调用的内容输出。

要运行外部程序并捕获其输出,请使用print运算符,如下所示:

qx

但是,正如Sobrique在回答中解释的那样,您实际上并不需要拨打外部程序,而是可以使用Perl的内置my $inode = qx/ls -i $filepath | awk '{print \$1}'"/; 功能。

stat

my $inode = stat($filepath)[1]; 返回一个包含有关文件的各种信息的列表 - 索引1保存其inode。当然,如果文件不存在,此代码将无法处理。

答案 1 :(得分:2)

不要只使用内置的stat

print (stat($filepath))[1]."\n";

print join "\n", map { (stat)[1] } @ARGV,"\n"