如何删除循环条件外部的空格?

时间:2014-07-06 07:13:39

标签: perl

我的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 

如何在循环外部打印没有空格的输出?在循环条件内打印输出没有空格,但我希望哪个输出是在循环外打印我该怎么办?

2 个答案:

答案 0 :(得分:1)

只是

print @mkh;
如果我理解你的问题,那么

没有引号。

顺便说一下,我仍然想知道map+split,@a。我写了map split, @a;map { split } @a;。为什么加号不会破坏任何东西?

似乎+@foo@foo的数组相同,但-@foo@foo的负数。有趣的。

答案 1 :(得分: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