map {lc} не работает для массива - PullRequest
0 голосов
/ 16 июня 2011

У меня есть файл со списком слов, каждый на новой строке и заглавными буквами, например

  • AAA
  • BBB
  • CCC
  • и т. д.

А что не так с кодом, который должен был преобразовать массив в нижний регистр, но потерпел неудачу: сопоставленный массив снова стал заглавным?

#!/usr/bin/perl -w
open(MYFILE, "$ARGV[0]") || die "opening bigList $!";
@Llist=<MYFILE>;
close (MYFILE);

@lc_word = map { lc } @Llist;
print @lc_word;

1 Ответ

11 голосов
/ 16 июня 2011

У меня работает.

Я переписал код в соответствии с принятыми лучшими практиками, просто чтобы вы не застряли с использованием Perl старого стиля.

#!/usr/bin/perl

use strict;
use warnings;

open( my $in, '<', $ARGV[0]) or die "cannot open '$ARGV[0]': $!";

my @Llist=<$in>;
close ($in);

my @lc_word = map { lc } @Llist;
print @lc_word

Дополнительные примечания: что такое кодировка файла? Если это чистый ASCII, то это будет работать, в противном случае вам нужно будет указать кодировку в open, например, для файла utf8: open( my $in, '<:utf8', $ARGV[0]). Кроме того, хулиганство всего файла в памяти с my @Llist=<$in>; несколько осуждается, хотя в любом случае у вас в любом случае будет весь нижний регистр в памяти.

Если вы хотите, чтобы строчная буква исходного массива (Llist), то вам нужно заменить map на foreach my $word(@Llist) { $word= lc $word; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...