我有一个输出 FQDN 列表的子路由,由新行分隔:
x1.server.com
s2.sys.com
5a.fdsf.com
^^ 就是这种格式,所以除了{variable text}.{variable text}.{variable text}之外没有其他模式
我的问题是如何将这个输出作为 foreach 语句的输入,以便我可以遍历每个 FQDN?
最佳答案
注意: 你说 sub 输出一个列表,但我假设你的意思是它输出一个字符串。否则,这个问题没有意义。
只需在换行符上拆分输出。假设子程序名为 subname
:
for my $fqdn (split /\n/, subname())
正如 Brian Roach 在评论中指出的那样,最佳解决方案是让子例程返回一个列表而不是一个字符串。但是,这对您来说可能不是一个可行的解决方案。无论哪种方式,如果您想尝试一下,只需在子例程中的适当位置添加
split
即可。例如。:sub foo {
...
#return $string;
return split /\n/, string;
}
如果你想更进一步,你可以使用
wantarray
函数,它检测子例程在哪个上下文中被调用:sub foo {
...
return $string unless wantarray;
return split /\n/, string;
}
虽然这很可爱,但除非您知道自己在做什么,否则它可能会导致不必要的行为。
关于Perl:子程序输出;输入到 foreach 语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9217452/