dre*_*ard 3 perl foreach subroutine
我有一个子路由,输出一个FQDN列表,由新行分隔:
x1.server.com
s2.sys.com
5a.fdsf.com
Run Code Online (Sandbox Code Playgroud)
^^它采用这种格式,因此除{variable text}之外没有其他模式.{variable text}.{variable text}
我的问题是我如何能够将此输出作为foreach语句的输入,以便我可以遍历每个FQDN?
注意:你说子输出一个列表,但我假设你的意思是它输出一个字符串.否则,这个问题没有实际意义.
只需在换行符上拆分输出即可.假设调用子例程subname:
for my $fqdn (split /\n/, subname())
Run Code Online (Sandbox Code Playgroud)
正如Brian Roach在评论中指出的那样,最佳解决方案是使子例程返回列表而不是字符串.但是,这对您来说可能不是一个可行的解决方案.无论哪种方式,如果你想尝试一下,只需split在子程序中的适当位置添加即可.例如:
sub foo {
...
#return $string;
return split /\n/, string;
}
Run Code Online (Sandbox Code Playgroud)
如果要获得高级,可以使用该wantarray函数,该函数检测调用子例程的上下文:
sub foo {
...
return $string unless wantarray;
return split /\n/, string;
}
Run Code Online (Sandbox Code Playgroud)
虽然这很可爱,但除非你知道自己在做什么,否则会导致不必要的行为.