2013-07-19 31 views
4

有无下一Perl代码打印第一在Perl的列表的几个要素

use 5.012; 
use warnings; 

#make some random numbers 
my @list = map { rand } 1..10; 

say "print all 10 numbers"; 
say $_ for @list; 

say "print only first 5"; 
my $n=0; 
for (@list) { 
     say $_ if $n++ < 5; 
} 

一些更紧凑的形式对第一(最后)打印N中的任阵列的元件?

下一个是语法错误...

$n=0; 
#say $_ if($n++ < 5) for @list; 

回答

10

要打印第5项:

say for @list[0 .. 4]; 

要打印的最后5个项目:

say for @list[-5 .. -1]; 
+1

有关更多详细信息,请参阅perldoc perldata并搜索/ Slices/http://perldoc.perl.org/perldata.html#Slices – shawnhcorey

3

只需使用一个list slice

#!/usr/bin/perl 
use strict; 

my @list = map { int(rand*10) } 1..10; 
print join(', ', @list[0..4]) . "\n"; 

此外,use strict,无一例外,除非你真的享受消费太多时间追捕微妙定位错误。

+0

我想'使用5.012'编译进口'默认strict',但好一点不过。 – squiguy

+2

@squiguy [更好地使它明确](http://www.perlmonks.org/?node_id=864234),特别是因为“使用5.012”不仅阻止脚本在较旧的Perl下运行,而且不管实际上是否存在其中5.12是新增功能,但[实际上可以防止较早版本的Perls用户轻松看到脚本在其版本下无法使用](http://www.perlmonks.org/?node_id=864292)。 –

+0

好点。我的每个脚本的前两行包括'use strict;使用警告;'。 – squiguy

2

另一种方式将它与while循环写来代替。

my $i = 0; 
say $list[$i++] while $i < 5; 
-1

而且,破坏性的办法:

splice @list, 5; 
say for @list; 
+0

为什么downvote? – ikegami