我需要了解这个特定程序的工作,看起来相当复杂,请问你是否可以帮我理解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”扩展名,如果你知道它的意思,请告诉我。我需要尽快理解这就是为什么我发布这个问题,我有点别的时间我会试着弄清楚自己,这对于像我这样的初学者似乎是一个复杂的程序,希望你理解。再次感谢您的时间。
答案 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脚本。