Вчера я написал небольшую подпрограмму, чтобы разобрать мой файл /etc/hosts и получить от него имена хостов.Как работает внутренняя карта?
Это подпрограмма:
sub getnames {
my ($faculty, $hostfile) = @_;
open my $hosts ,'<', $hostfile;
my @allhosts = <$hosts>;
my $criteria = "mgmt." . $faculty;
my @hosts = map {my ($ip, $name) = split; $name} grep {/$criteria/} @allhosts; # <-this line is the question
return @hosts;
}
Я назвал это как getnames('foo','/etc/hosts')
и вернулся имена хостов, которые соответствуют mgmt.foo
регулярному выражению.
Вопрос в том, почему я должен написать $name
только в выражении map
? Если я его не напишу, верните всю строку. Оценивает ли переменная значение?