在perl中实现这样一个功能的替代方法:`for(10…0)`

在perl中实现这样一个功能的替代方法:`for(10…0)`,perl,for-loop,Perl,For Loop,这在perl中不起作用:for(10…0)它基本上不会循环一次,因为它首先检查10>0 为循环创建递减迭代的任何替代速记 for (reverse 0 .. 10) { say $_; } 使用 不幸的是,这会将范围的计算强制到一个列表中,因此这比不使用reverse的循环使用更多的内存 for (map -$_,-10..0) { ... } for (map 10-$_,0..10) { ... } 如果范围的任何部分为负值,则第一部分比使用反向短。我不确定简洁是否是执行此操作的最佳

这在perl中不起作用:
for(10…0)
它基本上不会循环一次,因为它首先检查
10>0

为循环创建递减迭代
的任何替代速记

for (reverse 0 .. 10) {
  say $_;
}
使用

不幸的是,这会将范围的计算强制到一个列表中,因此这比不使用
reverse
的循环使用更多的内存

for (map -$_,-10..0) { ... }
for (map 10-$_,0..10) { ... }

如果范围的任何部分为负值,则第一部分比使用
反向

短。我不确定简洁是否是执行此操作的最佳标准,但在反向解决方案中不需要
映射,也不需要在反向解决方案中使用
反向

for (map -$_,-10..0) { ... }
for (map 10-$_,0..10) { ... }
# By Inverting without map, one of:
for(-10..0){$_=-$_;say}
for(-10..0){$_*=-1;say}
# Compare to similar length with map:
for(map-$_,-10..0){say}

# Can just use -$_ where $_ is used, if $_ is used < 6 times; that's shorter.
for(-10..0){say-$_}

# By Reversing without reverse (in a sub; in main use @ARGV or @l=...=pop@l)
@_=0..10;while($_=pop){say}

# More Pop Alternatives
for(@_=0..10;$_=pop;say){}
@_=0..10;for(;$_=pop;){say}
@_=0..10;do{say$_=pop}while$_
($_,@_)=(10,0..9);do{say}while($_=pop)
# Though, yeah, it's shorter with reverse
for(reverse 0..10){say}
#通过在不使用贴图的情况下反转,可以:
对于(-10..0){$\=-$\;say}
对于(-10..0){$*=-1;say}
#与map的类似长度进行比较:
对于(map-$\u10..0){say}
#如果使用$\的次数少于6次,则可以在使用$\的地方使用-$\;那更短。
对于(-10..0){say-$}
#通过在不倒车的情况下倒车(在sub中;主要使用@ARGV或@l==pop@l)
@_=0..10;而($u=pop){say}
#更多流行音乐选择
对于(@=0..10;$=pop;say){}
@_=0..10;对于(;$){say}
@_=0..10;边说{say$\=pop}$_
($_,@_)=(10,0..9);do{say}while($\uux=pop)
#不过,是的,它的反面比较短
对于(反向0..10){say}

内存不是问题。我在打高尔夫球的时候试图用这个去掉一些字符,但结果是使用了相同的数字。第一个字符比使用
reverse
短多少,它多了一个字符(在我的例子中是2个字符,因为我的循环中没有以0开头:/)计算错误。对于
M..N
reverse-N..M
vs
map-$,-M..N
)这样的范围,它们的大小相同,但是对于
-M..-N
这样的负范围,它们短了两个字符。第二个看起来是打高尔夫球的最佳选择。不幸的是,我不记得我问这个问题的全部代码,所以我永远不知道你的建议中哪一个是最好的。