#! /usr/bin/env perl
use strict;
use warnings;
my $prev_return;
while (<>) {
# assume letter in first column introduces a function return type
if (my($return_type) = /^([^\W\d]\w*)/) {
if ($return_type eq "void" && defined $prev_return) {
print $prev_return;
}
undef $prev_return; # reset after each function definition
}
elsif (/\\return\b/) {
$prev_return = "$ARGV:$.: $_";
}
}
continue {
close ARGV if eof; # reset $. at the end of each named file
}
注意:该模式[^\W\d]
使用双重否定技术来匹配不是数字的“单词字符”,即字母和下划线。
样本输出:
$猫文件.c
/*!
* \brief foo 函数
* \成功则返回OK,否则返回ERROR
*/
无效富(无效)
{
...
}
\return fdsklj
空栏(空)
无效的巴兹
$ ./doxygen-return-void 文件.c
file.c:3: * \如果成功则返回 OK,否则返回 ERROR
file.c:10: \return fdsklj
Perl 的<>
,也称为菱形运算符,使编写 Unix 风格的过滤器变得容易。这意味着您可以根据需要命名任意数量的路径。
$ ./doxygen-return-void file.c file.c
file.c:3: * \如果成功则返回 OK,否则返回 ERROR
file.c:10: \return fdsklj
file.c:3: * \如果成功则返回 OK,否则返回 ERROR
file.c:10: \return fdsklj
上面的程序也会消耗标准输入,但输出并不是非常有用。
$ 猫文件.c | ./doxygen-return-void
-:3: * \如果成功则返回OK,否则返回ERROR
-:10: \return fdsklj