2011-06-20 28 views
2

我发现这个perl脚本here这似乎将工作为我的目的。它打开一个Unicode文本文件并读取每一行,以便可以运行一个命令。但我无法弄清楚如何在每一行上运行某个ICU命令。有人可以帮我吗?我得到的错误是(largefile是脚本名称): 语法错误在./largefile第11行,在“/”附近。在./largefile线 搜索模式没有终止11Perl脚本通过每行读取文件行并在每行上运行命令

#!/usr/bin/perl 

use strict; 
use warnings; 

my $file = 'test.txt'; 
open my $info, $file or die "Could not open $file: $!"; 

while(my $line = <$info>) {  
do 
LD_LIBRARY_PATH=icu/source/lib/ ./a.out "$line" >> newtext.txt 
done 
} 

close $info; 

基本上,我想打开一个大的文本文件,然后运行命令(通常在命令行中运行...我想我怎么称呼这perl脚本是问题,但我不知道如何解决它)每行上的“LD_LIBRARY_PATH = icu/source/lib/./a.out”$ line“>> newtext.txt”,以便“newtext。然后在脚本处理完所有行后填充“txt”。 ICU部分正在打破高棉的言论。

任何帮助将不胜感激!我不是一个程序员......谢谢!

+0

是此命令假定从命令提示符下运行或终端? –

+0

我通常在Ubuntu – Nathan

+1

aha的终端里面运行LD_LIBRARY_PATH = icu/source/lib/./a.out“something here”>> newtext.txt,然后把整个命令放到系统中,像系统(“LD_LIBRARY_PATH = icu/source/lib/./a.out $ line >> newtext.txt“); PS:分号很重要,引号也是如此 –

回答

1

为了执行终端的命令,该命令需要在系统(),因此更改为

system("LD_LIBRARY_PATH=icu/source/lib/ ./a.out $line >> newtext.txt"); 
+0

反引号或qx //做同样的事情吗? – Jon

+0

backticks返回运行命令的输出。如果你不需要输出,那么使用system()。检查系统的返回值也是很好的。或者使用http://search.cpan.org/perldoc?IPC::System::简单或“autodie”来获取错误。 –

1

你尝试过反引号:

while (my $line = <$info>) { 
    `LD_LIBRARY_PATH=icu/source/lib/ ./a.out "$line" >> newtext.txt` 
    last if $. == 2; 
}