代码之家  ›  专栏  ›  技术社区  ›  boddhisattva

Perl程序-动态引导代码

  •  1
  • boddhisattva  · 技术社区  · 15 年前

    我需要理解这个特定程序的工作,它看起来很复杂,你能看看你是否能帮助我理解这个程序在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 回复  |  直到 15 年前
        1
  •  4
  •   daotoad    15 年前

    首先,关于您发布的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,我不是内部专家,但看起来作者举了一个例子,说明如何将Perl解释器嵌入到C程序中,并将其粘贴到一个奇怪的文件中。
    在我看来,它可以编译成 perl . 简而言之,另一件无用的艺术品。生产这个产品的人是通过生产线付款的吗?

    如果这是您继承的代码的状态,我为您感到抱歉。

        2
  •  1
  •   brian d foy    15 年前

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