gpt4 book ai didi

linux - 查找仅在特定子程序中搜索模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:42 24 4
gpt4 key购买 nike

我想在 .pm 文件中单独搜索特定子程序的模式。例如,我正在搜索 $pattern。这个 $pattern 可以在 pm 文件的多个子程序中找到,但是我只想在一个特定的子程序中检查 $pattern 是否存在,如果存在该模式我想执行一些操作

 if (/subroutine\{(.*)pattern(.*)\}/){
#some code;
}
else {
#some code
}

这行得通吗?你能帮我这个吗?

最佳答案

Devel::Examine::Subs被设计成做这样的事情(它使用 PPI 作为它的后端)。在这种情况下,我们只指定要查找的单个文件(它也可以遍历目录或内存中的模块)。

然后我们用我们的模式创建一个正则表达式(data 是我们在这里的搜索词),最后,include 只包含一个子项,它将排除文件中的所有其他子项.我们正在寻找 name() sub):

use warnings;
use strict;

use Devel::Examine::Subs;

my $des = Devel::Examine::Subs->new(file => 'Sub.pm');

my $search_regex = qr/data/;
my $subs_to_look_in = [qw(name)];

my $subs_that_match = $des->has(
search => $search_regex,
include => $subs_to_look_in
);

print "$_\n" for @$subs_that_match;

这是我在 Sub.pm 文件中查找的子文件:

sub name {

trace() if $ENV{TRACE};

my $self = shift;
return $self->{data}{name};
}

返回的是一个数组引用,所以如果它填充了任何东西(找到搜索词的每个子的名称,在这种情况下我们只查找一个)那么就有一个匹配项:

输出:

name

关于linux - 查找仅在特定子程序中搜索模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45604750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com