如果没有换行符,Perl将不会打印多个变量

时间:2017-05-09 14:19:39

标签: perl

我正在编写一个perl脚本来解析'c'头文件并提取枚举类型及其各自的成员。

  • Ubuntu 12.04
  • Perl 5.14.2

perl脚本似乎有效,但在某些情况下,某些变量不会打印。我已经将代码删除到以下最小重复。

我很确定这与缓冲有关...因为如果我在打印第一个变量和其他变量之间添加换行符就可以了。

我确实通读了suffering from bufferingPerl not printing properly,却没有找到解决我自己问题的方法。

这是头文件:

 #ifndef _ENUM_H_
 #define _ENUM_H_ 1

 /**
  * Enum definition
  */
 typedef enum
 {
    eENUMVAL0 = 0,
    eENUMVAL1,
    eENUMVAL2,
    eENUMVAL_LAST,
 } eMySuperEnum;

 #endif /* _ENUM_H_ */

这是剧本:

 #! /usr/bin/perl
 use strict;
 use warnings;


 our  @apiFile = ();


 if (exists $ARGV[0])
 {
     chomp( @apiFile = `cat $ARGV[0]`);
 }

 for my $i (0 .. $#apiFile)
 {
     if ($apiFile[$i] =~ /^\s*typedef\s+enum/)
     {
         print "$apiFile[$i] starts at $i\n"; 
     }
 }

打印:

starts at 6

但如果我在$ apiFile [$ i]之后在打印中添加换行符,那么它会打印整个内容:

print "$apiFile[$i]\nstarts at $i\n";

将打印:

typedef enum
starts at 6

我有很多次在同一行上打印过多个变量。引擎盖下发生的事情是perl没有在一行上打印这两个变量?

1 个答案:

答案 0 :(得分:8)

最好的猜测是 - 源文件来自Windows,并包括虚假的回车。

chomp如果在Linux上无法解决此问题。

但您可以使用s替换:

s/[\r\n]+$//g;将代替chomp;