perl单行命令统计项目中代码单行过长的信息

项目中单行代码太长是不便于阅读和维护的,这里用perl单行命令实现项目中的单行过长的代码信息统计,方便修改。为方便说明,这里以一个开源项目为例,github链接evpp。以commit id 477033f938fd47dfecde43c82257cd286d9fa38e 为例,git checkout -b test 477033f938fd47dfecde43c82257cd286d9fa38e 切一个分支测试。这里统计后缀为 (h|cpp|cc) 的代码,假定要统计单行长度超过170的代码所在的文件名和行数索引。下面给出命令:

find . -type f \( -name '*.cpp' -o -name '*.h' -o -name '*.cc' \) | xargs -i perl -lne '$len=length;print qq($ARGV:$. => length=$len) if $len > 170' {}

运行效果截图如下:
在这里插入图片描述
这里的输出中依次是文件名、行数索引、代码长度。也可以不用单行命令的形式,下面给出另外一种纯perl脚本的实现:

#! /usr/bin/perl
use v5.14;
use File::Find;
use IO::File;

my $max_len = 170; # 代码单行最大长度
my @filesArry = ();
my $callback = sub {
	# 根据需要自行修改正则
	push @filesArry, $File::Find::name if m{\.(h|cpp|cc)$};
};

find($callback, "./");

for my $filePath (@filesArry) {
	my $handle = IO::File->new($filePath, 'r');
	unless (defined $handle) {
		warn "$filePath: open failed !!!";
		next;
	}
	chomp(my @arry = <$handle>);
	for (my $index = 0; $index < @arry; ++$index) {
		my $line = $arry[$index];
		my $len = length($line);
		next if $len <= $max_len;
		my $lineIndex = $index + 1;
		say "[$filePath:$lineIndex], length=$len";
	}
}

运行效果如下:

在这里插入图片描述
和单行命令的输出结果是一样的,输出顺序略有差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值