$_的问题

$_的问题

写一个程序,读入一串数字(一个数字一行),将和这些数字对应的人名(下面列出的)输出来。(将下面的人
名列表写入代码中)。例如,当输入为1,2,4 和2,则输出的为fred, betty, dino, 和betty:
fred betty barney dino Wilma pebbles bamm-bamm
我写的程序
gamester@gamester:~/perl$ vim program
#!/usr/bin/perl -w
@name=qw(fred betty barney dino wilma pebbles bamm-bamm);
chomp($num=<STDIN>);
print "$name[$num - 1 ]\n";
gamester@gamester:~/perl$ ./program
3
barney
一次一行可以
gamester@gamester:~/perl$ vim program
#!/usr/bin/perl -w
@name=qw(fred betty barney dino wilma pebbles bamm-bamm);
chomp(@num=<STDIN>);
foreach (@num){
print "$name[$num - 1 ]\n";
}
为什么不行呢,把最后的$name[$_ - 1 ]\n就对了,高手给解释一下!谢谢!
1 中弄清楚$num=<STDIN>; 后$num中是什么
2 (@num=<STDIN)后@num的值; $num 和 @num的关系;

这个问题比较基础,你去看看foreach的用法:  $_ 表示默认的变量.你的@num是个数组,$num-1是什么意思?当他表示标量时只是表示数组的个数!
1中$num是标量Context
2中@num是标量Context,$num不是标量,$_是代替的那个
谢谢!


QUOTE:
原帖由 yingweixu 于 2008-10-17 09:51 发表
这个问题比较基础,你去看看foreach的用法:  $_ 表示默认的变量.你的@num是个数组,$num-1是什么意思?当他表示标量时只是表示数组的个数!

应该是@num在标量环境表示数组个数吧?和$num没啥关系
如果不用$_这个默认变量,用什么变量可以替代它,
$num和@num根本就是两回事,要使用下标访问@num中的元素是可以使用$num[n]的形式,这个和$num也是两回事。你第一个程序里用的是数组的下标访问方式,当然没有问题。
第二个程序里使用了foreach语句,这时$num和@num没有任何联系,foreach 默认的变量是$_ 所以用$_没问题。


QUOTE:
原帖由 machine 于 2008-10-17 10:08 发表
$num和@num根本就是两回事,要使用下标访问@num中的元素是可以使用$num[n]的形式,这个和$num也是两回事。你第一个程序里用的是数组的下标访问方式,当然没有问题。
第二个程序里使用了foreach语句,这时$num和 ...

谢谢,如果不用$_ 的话,可以用什么呢?
看看foreach
foreach my $num (@num) {
    print "$name[$num-1]\n";
}
可以,但是怎么解释,小弟新学,请不吝赐教!