mil*_*bos 3 arrays perl loops map-function
我想只解析标题名称main.c:
#include "foo.h"
#include "bar.h"
#include <stdio.h>
int add(int a,int b){ return a+b; }
int sub(int a, int b){ return a-b; }
int main(){
printf("%i\n",add(1,2));
}
Run Code Online (Sandbox Code Playgroud)
所以我的 perl 脚本如下所示:
#!/usr/bin/perl
open MAIN, $ARGV[0];
@ar = map { /#include "([^"]+)"/ ? $1 : next } <MAIN>;
#this one works (next inside for-loop, not map-loop)
for(<MAIN>){
if(/#include "([^"]+)"/){
push @ar2, $1;
} else {
next;
}
}
print "@ar\n";
print "@ar2\n";
Run Code Online (Sandbox Code Playgroud)
给出错误:
Can't "next" outside a loop block
Run Code Online (Sandbox Code Playgroud)
那么有next可能map吗?如果是这样,如何解决我的问题?
的给定迭代map可以返回任意数量的标量,包括零。
my @ar = map { /#include "([^"]+)"/ ? $1 : () } <MAIN>;
Run Code Online (Sandbox Code Playgroud)
与列表上下文中的捕获匹配的匹配返回匹配的捕获文本,而失败的匹配则不返回任何内容。如此,上述可以简化。
my @ar = map { /#include "([^"]+)"/ } <MAIN>;
Run Code Online (Sandbox Code Playgroud)