2012-10-05 35 views
1

我试图从一个Perl脚本中的unix命令将每个文件转储到一个数组中。下面是我得到的错误。任何人都可以请帮我解决这个问题?下面如何从UNIX命令获得结果到数组

Can't locate object method "cat" via package "C:/prac/cmm_ping.txt" (perhaps you forgot to load "C:/test/cmm_ping.txt"?) at fandd.pl line 25.

是我的程序

#!/usr/bin/perl 

use warnings; 

@files=glob("C:/prac/*"); 

foreach $file (@files){ 
    @data=system(cat $file); 
     foreach $line (@data){` 
     print $line; 
    } 
} 

回答

1
system(cat $file) 

含有一种间接的方法调用。以上是等价于:

system($file->cat) 

你的意思

system("cat $file") 

但这是错误的,因为你不转换成$file字面壳。最好避免完全绕过一个你不需要的shell来创建shell命令。

system('cat', $file) 
+0

当我用'系统(“猫”,$文件)'我'得到下面'“猫”不被识别为内部或外部的命令, 运行程序或批处理file.' – user1627901

+0

待办事项你有'猫'?如果是这样,修复你的路径。如果不是,你期望什么? – ikegami

+0

不知道如果我跟随你..我看到循环中变量的值'$ file'正在用绝对路径传递给'cat'命令。 – user1627901

1

我把对我是有关于运行的Unix在Perl命令发出了不同的路线,我能明白这一点与下面的代码。

@files = <C:/prac/*.ext>; 

for $file (@files){ 
    open (FILE, "$file")    or die $!; 
    open (OUT,">> C:/prac/data.txt") or die $!; 

    while($line= <FILE>) { 
    print OUT $line if $line =~ /something/ ; 
    } 

    close FILE; 
    close OUT; 
} 
相关问题