Perl程序 - 动态引导代码

时间:2010-03-18 14:05:18

标签: perl

我需要了解这个特定程序的工作,看起来相当复杂,请问你是否可以帮我理解Perl中的这个程序,我是初学者所以我几乎无法理解发生了什么以下链接中给出的代码,我们非常感谢您对此计划的任何指导或见解。谢谢...:) 该程序名为premove.pl.c

它与另一个程序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”扩展名,如果你知道它的意思,请告诉我。我需要尽快理解这就是为什么我发布这个问题,我有点别的时间我会试着弄清楚自己,这对于像我这样的初学者似乎是一个复杂的程序,希望你理解。再次感谢您的时间。

2 个答案:

答案 0 :(得分: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 );

}

可能令人困惑的主要问题是<>或null文件句柄读取。这里它从程序args中列出的任何文件中获取一行,或者如果没有提供参数,则读取STDIN。

此脚本基本上是cat filename > newdata.txt

至于premove.pl.c,我不是内部专家,但看起来作者就如何在C程序中嵌入Perl解释器并将其粘贴到一个奇怪命名的文件中作了一个例子。
在我看来它会编译成等同于perl的东西。总之,另一个无用的神器。制作此产品的人是否按线付款?

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

答案 1 :(得分:1)

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