map {lc}不适用于数组

时间:2011-06-16 06:55:10

标签: arrays perl

我有一个带有单词列表的文件,每个都在新行和大写字母中,如

  • 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 个答案:

答案 0 :(得分:11)

它对我有用。

我按照公认的最佳做法重新编写了代码,因此您不会使用旧式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; }