Код я написал, как показано ниже:Почему список карт Perl возвращает только 1?
#!/usr/bin/perl
my @input = ("a.txt" , "b.txt" , "c.txt") ;
my @output = map { $_ =~ s/\..*$// } @input ;
print @output ;
Мое намерение состоит в том, чтобы имя файла без расширения, хранящейся в массиве @output
. , но вместо этого он хранит значение, возвращаемое s///
, а не имя измененного файла в @output
, поэтому результат выглядит
1
1
1
так, что это правильный способ использования map
в этой ситуации?
@derobert: недостающие 's' - ошибка редактирования, я исправил ее.и я протестировал ваше решение, и оно работает! –
Рад слышать, как это работает. – derobert
Список :: MoreUtils http://search.cpan.org/perldoc/List::MoreUtils предлагает 'apply', который идеально подходит для такого рода вещей. Он работает как «карта», но не изменяет значения в аргументе массива. 'use List :: MoreUtils 'apply'; my @output = apply {s /\..*$//} @input; ' – daotoad