2010-03-18 56 views
1

我需要了解这个特殊程序的工作,这似乎是相当复杂的,请你看,如果你能帮助我理解这是什么程序在Perl呢,我是初学者,所以我几乎无法理解在下面的链接给出的代码中发生了什么,任何类型的指导或见解这个程序是高度赞赏。谢谢... :) 这个计划被称为premove.pl.cPerl程序 - 动态启动代码

多一个程序premove.pl有关它, 其代码如下所示:

#!perl 

open (newdata,">newdata.txt") 
|| die("cant create new file\n");#create passwd file 
$linedata = ""; 
while($line=<>){ 
chomp($line); 
#chop($line); 
print newdata $line."\n"; 
} 
close(newdata); 
close(olddata); 

__END__ 

我甚至不知道如何运行这里提到两个程序。我也想知道第一个程序的扩展是什么意思,因为它有“pl.c”的扩展名,请告诉我,如果你知道它可能意味着什么。我需要尽快了解它,为什么我要发布这个问题,我还有一些其他的时间,我会尽力弄清楚自己,这对于像我这样的初学者来说似乎是一个复杂的程序,希望你能理解。再次感谢您的时间。

回答

4

首先,关于您发布的Perl代码:

参见:

这是一些残暴恶意代码。我为你重写了它,没有任何混淆和愚蠢。这应该更容易理解。

#!perl 
use strict; 
use warnings; 
use IO::File; 

my $newdata = IO::File->new('newdata.txt', '>') 
    or die "Unable to open newdata - $!\n"; 

while(my $line = <>) { 

    $newdata->print($line); 

} 

可能造成混淆的主要原因是<>或空文件句柄读取。在这里它从程序参数中列出的任何文件中抓取一行,或者如果没有提供参数,它会读取STDIN。

这个剧本基本上是cat filename > newdata.txt

至于premove.pl.c,我不是专家内部,但它看起来像笔者以了解如何嵌入在C程序Perl解释器的例子并粘贴它变成一个奇怪的命名文件。
它看起来像它会编译成相当于perl的东西。总之,另一个无用的神器。生产这种产品的人是否由生产线支付?

如果这是你继承了代码的状态,我为你感到难过。

+0

嗨.. :)谢谢你的回答。代码premove.pl,是不是只是从任何文本中删除新的行字符(如'\ r'),并附加新生成的文本,即新数据与'\ n'?在您修改程序的版本中,我看不到任何使用的“chomp”关键字,您是否删除了它?它看起来像是用原来的文件中的'\ n'替代了新的行字符(比如说早些时候它是'\ r')并将其附加到newdata.txt中。我对我发布的计划的解释是否正确? – boddhisattva 2010-03-19 10:59:06

+0

@mgj,我删除了'chomp',因为它是多余的。'chomp'在一个字符串的末尾删除一个出现的全局'$ /'(如果你使用英文''也就是'$ INPUT_RECORD_SEPARATOR'),默认为'\ n'。由于原始代码扼杀了行,然后在末尾连接了一个'\ n'并打印出来,所以它没有做任何事情。请注意,我不打印'$ line' - 我不删除'\ n',所以我不必将其添加回去。 'chomp'对'\ r'字符没有影响,除非'$ /'设置为'\ r'。 – daotoad 2010-03-19 17:25:24

+0

K .. :)感谢您的回答daotoad,它看起来像代码没有做任何事情,但如果我给在该字符串的末尾有\ r的ip文件,那么它就是这样的情况,它chmops \ r并代之以\ n的权利,那么我认为chomp不再是多余的......正确的......? – boddhisattva 2010-03-20 02:30:31

1

它看起来像有人试图在你的程序上运行一个Perl-to-C转换器,以便它们可以将它编译为一个C对象。他们可能认为这会让它变得更快。我猜你可以忽略.c文件并直接使用该Perl脚本。

+0

谢谢你的回答先生,也为你的时间.. :) – boddhisattva 2010-03-25 02:51:09