我正在编写一个perl脚本来解析'c'头文件并提取枚举类型及其各自的成员。
perl脚本似乎有效,但在某些情况下,某些变量不会打印。我已经将代码删除到以下最小重复。
我很确定这与缓冲有关...因为如果我在打印第一个变量和其他变量之间添加换行符就可以了。
我确实通读了suffering from buffering和Perl 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没有在一行上打印这两个变量?
答案 0 :(得分:8)
最好的猜测是 - 源文件来自Windows,并包括虚假的回车。
chomp
如果在Linux上无法解决此问题。
但您可以使用s
替换:
s/[\r\n]+$//g;
将代替chomp;