Arrays 映射{lc}不适用于数组
我有一个有单词列表的文件,每一个都在新的一行,用大写字母,比如Arrays 映射{lc}不适用于数组,arrays,perl,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; #/usr/
- 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;
#/usr/bin/perl-w
打开(MYFILE,“$ARGV[0]”| | die“打开大列表$!”;
@利斯特=;
关闭(MYFILE);
@lc_word=map{lc}@Llist;
打印@lc_单词;
这对我很有用
我按照公认的最佳实践重新编写了代码,这样您就不会被旧式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
#/usr/bin/perl
严格使用;
使用警告;
打开(我的$in,'到底是怎么回事?没有必要(永远)显式地打开$ARGV[0]。上面的脚本可以重新编写:'@lc_-word=map{lc};print@lc_-word'@William Pursell有时有理由显式地打开$ARGV[0]
。@mob我可能夸大了“曾经”…但是很少有必要这样做,而且在这种情况下肯定不需要这样做。更简单的一行代码:perl-pe'$\ulc'
,这里不需要映射。我假设OP的要求是更大代码的一部分。实际上它是utf8,所以我可能需要指定编码。如果您希望输出为utf8格式,那么您也可以必须通过写入binmode STDOUT':utf8'来指定它;
最佳实践通常包括不显式打开$ARGV[0],但只是在没有文件句柄的情况下使用读取ARGV。@William Pursell你说得对。我试图稍微限制重写,所以我在这里重点介绍了最重要的一点,使用词法文件句柄和3 arg形式的open
。