2011-06-16 4 views
0

工作,我有一個單詞列表,每一個新的行和大寫字母一個文件,像地圖{LC}不用於陣列

  • AAA
  • BBB
  • CCC

現在,應該將數組轉換爲小寫但失敗的代碼有什麼問題:映射數組又是大寫了嗎?

​​
+4

'使用嚴格的;'! – 2011-06-16 07:21:37

+3

究竟是如何不起作用? – cjm 2011-06-16 07:40:26

+1

沒有必要(永遠)明確地打開$ ARGV [0]。上面的腳本可以重寫:'@lc_word = map {lc} <>; print @lc_word' – 2011-06-16 13:34:26

回答

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),那麼你就需要更換mapforeach my $word(@Llist) { $word= lc $word; }

+1

即使這樣做:'perl -we'print map {lc} <>;''。咦? – Dallaylaen 2011-06-16 07:37:36

+2

簡單一行:'perl -pe'$ _ = lc'',這裏不需要地圖。我認爲OP的要求是更大代碼的一部分。 – mirod 2011-06-16 07:47:30

+1

其實它是utf8,所以我可能需要指定編碼。 – Temujin 2011-06-16 08:28:41