Perl Regexes - 替换某些匹配实例

1 regex perl

我正在尝试替换源文件中的文本,就像C预处理器的工作方式一样.我的方法是解析常量及其值,并用它们填充哈希数组.我的问题如下:

在源文件中,我有:

#define CONSTANT 10
#define CONSTANT_PLUS_ONE CONSTANT + 1
Run Code Online (Sandbox Code Playgroud)

/^#define\s+(\w.*)\s+.*($key).*/用来匹配第二行,但当我替换时s/$2/$defines{$key}/,两个CONSTANT实例都被替换,即

#define CONSTANT 10
#define 10_PLUS_ONE 10 + 1
Run Code Online (Sandbox Code Playgroud)

我是一个Perl新手,所以我希望有人可以指出我正确的方向,或者如果我犯了一个明显愚蠢的错误.

dre*_*ves 5

尝试指定单词边界:

s/\b$2\b/$defines{$key}/g;
Run Code Online (Sandbox Code Playgroud)