我有一个带有单词列表的文件,每个都在新行和大写字母中,如
现在,应该将数组转换为小写但失败的代码出了什么问题:映射数组又是大写的?
#!/usr/bin/perl -w
open(MYFILE, "$ARGV[0]") || die "opening bigList $!";
@Llist=<MYFILE>;
close (MYFILE);
@lc_word = map { lc } @Llist;
print @lc_word;
答案 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; }