我试图以相反的顺序打印数组的元素,从最后一个元素开始到第0个元素,当我不知道列表计数时,不使用反向函数.这是输入和输出.
#!/usr/bin/perl/ use warnings; use strict; @months = (January, February, March, April, May, June, July, August); print @months[-6 .. 0]; print @months[-1 .. 0];
它给我的输出是
MarchAprilMayJuneJulyAugustJanuary AugustJanuary
但我想要的是,它应该打印出来
AugustJulyJuneMayAprilMarchFebruaryJanuary
谁能请帮忙.我是一名perl初学者.
@months[-6 .. 0], @months[-1 .. 0]
要么
@months[-6 .. 0, -1 .. 0]
手段
@months[-6, -5, -4, -3, -2, -1, 0, -1, 0]
但是你想要
@months[-1, -2, -3, -4, -5, -6, -7, -8]
或者干脆
@months[7, 6, 5, 4, 3, 2, 1, 0]
明显的解决方案是
reverse(@months)
其他有效的表达方式:
@months[ map { -$_ } 1..@months ] @months[ map { $#months-$_ } 0..$#months ] map { $months[-$_] } 1..@months map { $months[ $#months-$_ ] } 0..$#months use feature qw( current_sub ); sub { @_ ? pop(@_), __SUB__->(@_) : () }->(@months) do { my @reversed; for my $month (@months) { unshift(@reversed, $month) } @reversed }
就地解决方案:
for (0..@months/2-1) { ($month[$_], $month[-$_-1]) = ($month[-$_-1], $month[$_]); }