+ -
当前位置:首页 → 问答吧 → 为什么shift后只显示一半数字?Windows 上的strawberry perl

为什么shift后只显示一半数字?Windows 上的strawberry perl

时间:2011-03-08

来源:互联网

@str=(1..10);
foreach $num (@str){
    print shift (@str) if defined $num;
   
   }
#结果显示12345
我的是version 5.005_03版本,Windows 上的strawberry perl。
怎样才能显示完全(1 2 3 4 5 6 7 8 9 10)啊?

作者: 小perl   发布时间: 2011-03-08

你在历遍 @str 的同时又删除其中的元素结果是不确定的

作者: zhlong8   发布时间: 2011-03-08

@str=(1..10);
foreach $num (@str){
    print $num;
    print shift (@str) if defined $num;
   }

作者: ziyunfei   发布时间: 2011-03-08

@str=(1..10);
foreach $num (@str){
   print shift (@str) if defined $num;
   system ("ping /n 1 127.0.1>nul");
   }
我想延迟输出数字,但后面的6,7,8,9,10显示不出来了(丢了),有什么别的办法吗?谢谢啦,新手很多未接触。

作者: 小perl   发布时间: 2011-03-08

回复 zhlong8


    我看了本论坛的一个关于pop的帖子,发现和这相似,但不知道是什么原理?

作者: 小perl   发布时间: 2011-03-08

本帖最后由 zhlong8 于 2011-03-09 00:39 编辑


QUOTE:
回复  zhlong8


    我看了本论坛的一个关于pop的帖子,发现和这相似,但不知道是什么原理?
小perl 发表于 2011-03-08 23:26




   

QUOTE:
1 2 3 4 5 6 7 8 9 10 idx=0        shift=1        $_=1
2 3 4 5 6 7 8 9 10        idx=1        shift=2        $_=3
3 4 5 6 7 8 9 10        idx=2        shift=3        $_=5
4 5 6 7 8 9 10        idx=3        shift=4        $_=7
5 6 7 8 9 10        idx=4        shift=5        $_=9
6 7 8 9 10        idx=5        index 越界,循环结束



类似
@a=1;
for (@a) {unshift @a, 1;}
是无限循环直到内存耗尽,但这些现象都属于实现问题,根本就不应该这样用

作者: zhlong8   发布时间: 2011-03-09