【发布时间】:2017-05-09 14:19:38
【问题描述】:
我正在编写一个 perl 脚本来解析“c”头文件并提取枚举类型及其各自的成员。
- Ubuntu 12.04
- Perl 5.14.2
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 没有在一行上打印这两个变量?
【问题讨论】:
-
输入文件是否来自windows?它可能包括一个杂散的
\r,会搞砸打印。 -
$apiFile[$i]包含一个 CR(carrage return),所以光标会设置在行首
标签: perl