1

我正在尝试将每个文件的转储从 Perl 脚本中的 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;
    }
}
4

2 回答 2

1
system(cat $file)

包含间接方法调用。以上等价于:

system($file->cat)

你的意思是

system("cat $file")

但这是错误的,因为您没有转换$file为 shell 文字。最好通过绕过您不需要的 shell 来完全避免创建 shell 命令。

system('cat', $file)
于 2012-10-05T20:53:08.443 回答
1

对于在 Perl 中运行 Unix 命令时遇到的问题,我采取了不同的方法,我能够通过以下代码解决这个问题。

@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;
}
于 2012-10-10T14:41:14.567 回答