NB: Вы говорите, что субвывод содержит список, но я предполагаю, что вы имеете в виду, что он выводит строку. В противном случае этот вопрос спорный.
Просто разделите выход на новую строку. Предполагая, что функция вызывается subname
:
for my $fqdn (split /\n/, subname())
Как Брайан Роуч отмечает в комментариях, оптимальным решением является сделать подпрограмма возвращает список вместо строки. Однако это не может быть для вас жизнеспособным решением. В любом случае, если вы хотите попробовать, просто добавьте split
в соответствующее место в подпрограмме. Например:
sub foo {
...
#return $string;
return split /\n/, string;
}
Если вы хотите, чтобы получить передовые, вы можете использовать функции wantarray
, который определяет, в каком контексте называется подпрограмма:
sub foo {
...
return $string unless wantarray;
return split /\n/, string;
}
Хотя это очень мило, это может приводят к нежелательному поведению, если вы не знаете, что делаете.
+1 Или ... измените подпрограмму, чтобы фактически вернуть массив, а не строку. –
@BrianRoach Это было бы оптимально для этого случая, но может случиться так, что он не может изменить подпрограмму из-за того, что она используется в другом месте. – TLP
@TLP - спасибо за это, я приму свой ответ. @Brian Roach: Я в конечном итоге принял ваш совет. Я добавил «push @ results, $ domain», а затем «return @ results» в их уважаемые части подпрограммы, а затем вызвал цикл foreach, как 'foreach $ host (get_mirror_list()) {', и он работал красиво. Я не эксперт в perl, поэтому любой экспертный совет, который я могу получить, я пытаюсь реализовать, а не просто, хотя, похоже, было проще сделать это. Благодаря! – drewrockshard