我正在编写Perl脚本来执行C代码 我想将我的代码排除在注释(/ *和* /)
中运行为此我使用标志,遇到(/ *)时设置flag = 1,遇到(* /)时标志= 0
我的代码
my $input = $ARGV[0];
my $flag = 0;
while(<>){
if($_ =~ "/*" ){
$flag = 1;
}
if($_ =~ "*/"){
$flag = 0;
}
if($flag == 0){
#execute other code
}
}
但我不行。它正在考虑所有行都有/ *
答案 0 :(得分:2)
问题是你正在使用的正则表达式中有* s,你需要转义它们。尝试:
$flag = 0;
while(<>){
if($_ =~ /\/\*/ ){
$flag = 1;
}
if($_ =~ /\*\//){
$flag = 0;
}
if($flag == 0) {
execute other code
}
}
顺便说一句,你粘贴的代码也有一个缺少的结束括号 我也修好了。
答案 1 :(得分:1)
替代解决方案:
my $input = $ARGV[0];
my $flag = 0;
while(<>){
if($_ =~ "\Q/*\E" ){
$flag = 1;
}
if($_ =~ "\Q*/\E"){
$flag = 0;
}
if($flag == 0){
#execute other code
}
}
\ Q和\ E之间的任何内容都被视为纯文本,所有RegEx特殊字符都被忽略。
替代:如果RegEx不是固定的,而是动态值,请使用quotemeta(参见http://perldoc.perl.org/functions/quotemeta.html)。