2014-07-06 55 views
1

我的Perl代碼如何刪除循環條件外部的空白?

use warnings; 
use strict; 
my @a = <DATA>; 
my %j = qw(aa AA bb BB cc CC dd DD ee EE ff FF gg GG hh HH ii II jj JJ kk KK ll LL); 
my @vj = map+split,@a; 
my @mkh; 
foreach(@vj){ 
    my $k = $j{$_}; 
    my @ab = split(' ',$k); 
    push(@mkh,@ab); 
} 
print "@mkh"; 
__DATA__ 
jj dd ee aa ii hh kk ll gg bb cc ff 

如何打印輸出,而不空格在循環之外?在循環條件內打印沒有空格的輸出,但我期望哪些輸出在循環之外打印,我該怎麼辦?

+0

你知道'@a = '在單個元件'讀取$一個[0]',並且該元素具有在端部的'\ N' ?爲什麼不使用'$ a = '然後'chomp $ a'。如果你這樣做,你不需要'地圖'。 –

回答

1

這只是

print @mkh; 

沒有引號,如果我明白你的問題的權利。

順便說一句,我仍然想知道關於map+split,@a。我會寫map split, @a;map { split } @a;。爲什麼加號不會破壞任何東西?

看起來[email protected]@foo是相同的陣列,但[email protected]@foo的負尺寸。滑稽。

+0

謝謝先生,'地圖拆分,@ a'表現得像'地圖+拆分,@ a;'+符號,用於區分地圖和拆分功能。我只是perl的初學者。 –

+0

對於初學者來說不錯的努力:-) – SzG

1

插值數組時,元素由$"全局變量分隔。

爲了避免這種行爲,直接使用print這個數組。

print @mkh; 

這是記錄在perlvar

  • $LIST_SEPARATOR
  • $"

    當一個數組或數組切片被內插到一個雙引號字符串或類似的上下文如/.../,它的元素被這個值分開。默認是一個空格。例如,這樣的:

    print "The array is: @array\n"; 
    

    是相同的:

    print "The array is: " . join($", @array) . "\n"; 
    

    助記符:雙引號方面的工作。

在一個側面說明,或許你想被引入到uclc功能。

use warnings; 
use strict; 

while (<DATA>) { 
    s/\s//g; 
    print uc, "\n"; 
} 

__DATA__ 
jj dd ee aa ii hh kk ll gg bb cc ff 

輸出:

JJDDEEAAIIHHKKLLGGBBCCFF 
+0

儘管沒有在'@ mkh'周圍引用作品。它不能解決'print'末尾沒有'\ n'的問題。不幸的是,加入'print @mkh。 「\ n」;'打印出'12'。您需要使用'say'或'print join(「」,@mkh)。 「\ n」;' –

+0

或者只是使用逗號','而不是拼接'''強制標量上下文? – Miller