shift的问题

shift的问题

#!/perl -w
$index=1;
my $dir=shift || '/root/perl';
my $tmp="dirlist.txt";
open(W,"> $tmp") || die "$!\n";
find(\&doit,$dir);

close(W);

sub doit {
        print_process_status($index);
        print W "$File::Find::name\n";
        $index++;
}

sub print_process_status {
    my $i=shift;                         #这里的shift传了什么值给$i,
    my $j = $i % 4;
    SWITCH : {
        $j == 0 && do { print STDERR " (|)\r";  last SWITCH; };
        $j == 1 && do { print STDERR " (/)\r";  last SWITCH; };
        $j == 2 && do { print STDERR " (-)\r";  last SWITCH; };
        $j == 3 && do { print STDERR " (\\)\r"; last SWITCH; };
    }

第一次是$i=1;吗
另第二次如何执行的
读书去吧。
这个函数把数组的第一个值移出并且返回它,然后把数组长度减一并且把所有的东西都顺移。如果在数组中不再存在元素,它返回 undef。
如果省略了 ARRAY,那么该函数在子过程和格式的词法范围里移动 @_;它在文件范围(通常是主程序)或者在由 eval STRING,BEGIN { },CHECK { },INIT { },和 END {} 这样的构造里面的词法范围里移动 @ARGV。

读到这里我不懂了,是把当前目录或是/roo/perl目录
传给SHIFT吗,那一次,第二次不就成了UNDEF了吗


QUOTE:
原帖由 flw 于 2008-12-10 15:11 发表
读书去吧。

应该是看文档


QUOTE:
原帖由 MMMIX 于 2008-12-10 15:57 发表

应该是看文档

我觉得是书。
比文档上的内容还要基础。
在上面@_刚好存了路径,是个数组.
shift刚好给@_中的第一个参数取出来,取出来的刚好是这个数组中的路径,因为只有一个元素。不知我理解的对不?
如何只有一个,那下面SWITCH,就执行一下