如何使"使用未初始化的值"警告消失?

ral*_*ldi 1 regex perl

比方说,我想写一个正则表达式来改变这一切<abc>,<def><ghi>标签为<xyz>标签..我也想改变自己的结束标记</xyz>.这似乎是一个合理的正则表达式(忽略反引号;如果我不包含它们,则StackOverflow会出现小于号的问题):

`s!<(/)?(abc|def|ghi)>!<${1}xyz>!g;`
Run Code Online (Sandbox Code Playgroud)

它也有效.唯一的问题是,对于打开标签,可选的$ 1变量被赋予undef,因此我得到一个"使用未初始化的值..."警告.

解决这个问题的优雅方法是什么?我宁愿不把它变成两个单独的正则表达式,一个用于打开标签,另一个用于关闭标签,因为那时需要维护两个标签列表副本,而不是一个.

编辑:我知道我可以在代码的这个区域关闭警告,但我不认为"优雅".

moo*_*dow 10

在捕获支架内移动问号.这样,$ 1将始终定义,但可能是零长度字符串.