在工作中,我有这个旧脚本,其作者不再在公司工作。脚本本身运行正常,但是每次运行时,都会收到以下警告:
Possible unintended interpolation of $\ in regex at /bin/script line 223.
Possible unintended interpolation of $\ in regex at /bin/script line 226.
我标记的两行是对应的:
sub get_modul {
...
open (IN, "path/to/file") || Pl_Fatal ("Error trying to open file");
$tempvar = <IN>;
close (IN);
@temp = split(":", $tempvar);
if ($#temp != 1) {
$MODUL =~ s/$\$2\///; # <--
}
else {
$MODUL =~ s/$\$0\///; # <--
}
}
当我收到两行互相排斥的警告时,我认为它不必对输入做任何事情,只是以防万一:
脚本分析:server:user@host:/path/to/rep
或/path/to/rep
,两种情况下的输出均为/path/to/rep
。
如果有任何帮助,我正在运行Perl v5.18.2。
答案 0 :(得分:2)
此警告在perldiag中进行了解释。
在正则表达式中可能会意外地插入$ \
(不明确),您在正则表达式中说了类似
export class ScheduleManager extends SampleBase { constructor() { super(...arguments); this.state = { visible : false } } openModal() { this.setState({ visible : true }); } closeModal() { this.setState({ visible : false }); } on_render_cell(args) { let ele = document.createElement('div'); var sum=0; var cursor=Event.find({Teacher:teacherName}); cursor.forEach(function(event){ if(convert(event.StartTime)===convert(args.date)) sum = sum + parseFloat(event.Duration); }); let hoursPerDay = sum/60; let percentHours=(hoursPerDay/maxHoursPerDay)*100; let result =''; if(percentHours===0) { result='<img id="aaa" ref="abc" className="weather-image" height="25px" width="25px" src="http://www.clker.com/cliparts/h/e/s/t/j/U/grey-circle.svg.thumb.png" onClick={console.log(this)} />'; } else if(percentHours<=25) { result = '<img className="weather-image" src= "http://www.clker.com/cliparts/0/w/P/n/G/3/blue-circle-th.png" />'; } else if(percentHours>25 && percentHours<=50) { result='<img className="weather-image" src= "http://www.clker.com/cliparts/o/b/y/x/Z/c/yellow-dot-th.png" />'; } else if(percentHours>50 && percentHours<=75) { result = '<img className="weather-image" src= "http://www.clker.com/cliparts/1/A/W/q/h/h/orange-circle-th.png" />'; } else { result='<img className="weather-image" src= "http://www.clker.com/cliparts/3/m/Q/u/P/J/red-circle-small-new.svg.thumb.png" />'; } ele.innerHTML = result; (args.element).appendChild(ele.firstChild); } render(){ return ( <div> <input type="button" value="Open" onClick={() => this.openModal()} /> <Modal visible={this.state.visible} width="400" height="300" effect="fadeInUp" onClickAway={() => this.closeModal()} > <div> <h1>Title</h1> <p>Some Contents</p> <a href="javascript:void(0);" onClick={() => this.closeModal()}>Close</a> </div> </Modal> <p>Grey circle denotes no classes for the day</p> <p>Blue circle denotes less than 25% occupancy for the day</p> ) } }
的内容。正则表达式m/$\/
转换为:匹配单词'foo',输出记录分隔符(请参阅perlvar中的$ \)和字母's'(一次或多次),后跟单词'bar'。>如果这是您想要的,则可以使用
m/foo$\s+bar/m
(例如:m/${\}/
)使警告消失。如果相反,您打算在行末匹配单词“ foo”,然后在下一行匹配空格,然后在下一行匹配单词“ bar”,则可以使用
m/foo${\}s+bar/
(例如:{{1} }。
m/$(?)\/
是输出记录分隔符。这就是Perl自动将其附加到使用m/foo$(?)\s+bar/
输出的任何内容上。默认值为$\
。
因此,在您的正则表达式中,可能什么也不做(因为print()
在字符串中使用时会变成空字符串)。但是无法确保没有看到其余的代码-因为您可能会在程序的其他位置更改undef
的值。