Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 映射{lc}不适用于数组_Arrays_Perl - Fatal编程技术网

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