将perl脚本转换为c ++(cppgen)文件

时间:2014-08-20 18:13:32

标签: perl

我有这个文件mk-colors.perl,它创建了一个rgb颜色的无序图。 在我的makefile中,我尝试这样做:

  all : ${EXECBIN}
    - checksource ${ALLSOURCES}

  ${EXECBIN} : ${OBJECTS}
     ${COMPILECPP} -o $@ ${OBJECTS} ${LINKLIBS}

  %.o : %.cpp
     ${COMPILECPP} -c $<

  colors.cppgen: mk-colors.perl
     mk-colors.perl >colors.cppgen

然而,似乎perl脚本没有正确编译,这段代码在我的工作服务器上工作正常,但是当我复制到我的localmachine时,perl不会编译成cppgen文件。我正在运行XUbuntu 12.04,我需要安装任何新东西吗?感谢

编辑: 我一直收到这个错误:

./mk-colors.perl: invalid line: ! $Xorg: rgb.txt,v 1.3 2000/08/17 19:54:00 cpqbld Exp $`

这是perl代码:

#!/usr/bin/perl
# $Id: mk-colors.perl,v 1.3 2014-05-21 15:40:52-07 - - $
use strict;
use warnings;

my %colors;
my $file = "/usr/share/X11/rgb.txt";
open RGB_TXT, "<$file" or die "$0: $file: $!";
while (my $line = <RGB_TXT>) {
  $line =~ m/^\s*(\d+)\s+(\d+)\s+(\d+)\s+(.*)/
     or die "$0: invalid line: $line";
  my ($red, $green, $blue, $name) = ($1, $2, $3, $4);
  $name =~ s/\s+/-/g;
  $colors{$name} = [$red, $green, $blue];
  }
  close RGB_TXT;

  print "// Data taken from source file $file\n";
  print "const unordered_map<string,rgbcolor> color_names = {\n";
  printf "   {%-24s, rgbcolor (%3d, %3d, %3d)},\n",
              "\"$_\"", @{$colors{$_}}
   for sort {lc $a cmp lc $b} keys %colors;
    print "};\n";

1 个答案:

答案 0 :(得分:1)

您的die语句正在执行:

$line =~ m/^\s*(\d+)\s+(\d+)\s+(\d+)\s+(.*)/
   or die "$0: invalid line: $line";

这表示/usr/share/X11/rgb.txt中的某些数据不符合您的预期格式。打开这个文件,找到有问题的行,并弄清楚如何修补你的Perl脚本以便正确处理它。