-1

我正在编写 perl 脚本来找出某些代码中未使用的变量。我能够获得该函数中所有变量的整个函数体和名称。

我现在想计算函数体内每个变量的出现次数(如果它只出现了 1,这是未使用的变量,否则没关系)。

删除函数体中的注释以避免错误计数。

foreach my $var (@vars) {                   # @vars is an array of all variables name
                                            # $fun_body is function body (string)
    my $count = $fun_body =~ tr/\Q$var//;   # this line is tricky and does not work
    print $count." : ".$var."\n";
}

现在我从我的脚本中得到一些无用的信息:

1046 : v_result
1046 : v_LastValue
1046 : v_LastValue_2

看起来脚本不使用变量作为正则表达式的输入,而是$var用作字符串。优化不是我想要的,或者我会在脚本正常工作时进行优化(要解析的代码相对较小,它有 100k - 500k 行)。

我的问题是:any1 知道如何使用使用变量的正则表达式来计数吗?

4

2 回答 2

2

perlfaq4(如何计算字符串中子字符串的出现次数?):

如果您只是在寻找一个字符,这很好。但是,如果您尝试计算较大字符串中的多个字符子字符串,则 tr/// 将不起作用。

use warnings;
use strict;

my $fun_body = 'foo bar baz foo goo hoo';
my @vars = qw(foo bar);
for my $var (@vars) {
    $var = quotemeta $var;
    my $count = () = $fun_body =~ /\b$var\b/g;
    print "$var: $count\n";
}

__END__

foo: 2
bar: 1
于 2013-10-21T14:34:14.733 回答
1

B::Xref模块将向您显示您可能想要的有关标识符定义和程序中使用的所有信息。

像这样使用它

perl -MO=Xref myprog.pl
于 2013-10-21T14:43:27.313 回答