2010-03-13 49 views

回答

19
$newstring = join('', @array[$i..$j]) 
+0

谢谢。如果$ j是字符串的结尾,我为$ j使用了标量(@array)-1。有没有其他方式做到这一点。 – 2010-03-13 06:10:41

+4

@iamrohitbanga是的:'$#array'是'scalar @ array-1'的简短方式。 – mob 2010-03-13 06:12:54

+0

对不起,我不关注“$ j是字符串的结尾”部分。但标量(@array)-1是$#数组。 – xiechao 2010-03-13 06:14:56

7
my $foo = join '', @array[$i..$j]; 

首先,我们生成了我们需要的值的数组切片,然后我们加入他们的空字符“”。

-1

试试这个....

use warnings ; 
use strict ; 
use Data::Dumper ; 
my $string ; 
map { $string .= $_; } @arr[$i..$j] ; 
print $string ; 
+7

你不应该在void上下文中使用'map';一个'for'循环也会起作用。但是,只要使用'join',任何类型的循环都是不必要的。 – friedo 2010-03-13 06:28:07

+1

无效'map'邪恶?我会使用后缀'for'大多数地方可以使用void'map'。在这里我会使用'join'。但是Perl 5.8.1在调用它在void context中被调用时会优化掉map的返回值。有关void的更多讨论,请参见:http://www.perlmonks.org/index.pl?node_id = 296742 – daotoad 2010-03-13 18:22:19

2

只需放入引号内的Perl数组足够来连接它,如果你满意的空格作为连接字符:

@array = qw(a b c d e f g); 
$concatenated = "@array[2 .. 5]"; 
print $concatenated; 
## prints "c d e f" 

或当然

$" = '-'; 
@array = qw(a b c d e f g); 
$concatenated = "@array[2 .. 5]"; 
print $concatenated; 

如果你更喜欢“cdef”。

+0

您也可以使用'undef $';'来消除数组元素之间的字符。将对全局“$”变量的更改本地化到自己的块中。 – toolic 2010-03-13 12:58:02

相关问题