如果我做
my @answer = qw(java python perl c);
foreach (@answer){
print "[$_]\n";
}
Run Code Online (Sandbox Code Playgroud)
然后它会打印出来
[java]
[python]
[perl]
[c]
Run Code Online (Sandbox Code Playgroud)
但是,如果我$answer之前添加[$_]:
my @answer = qw(java python perl c);
foreach (@answer){
print "$answer[$_]\n";
}
Run Code Online (Sandbox Code Playgroud)
然后它会打印出来
java java java java
Run Code Online (Sandbox Code Playgroud)
这是为什么?
fri*_*edo 13
循环中的每个元素都被放入$_.当你说$answer[$_],你要求数组元素$answer['java'],$answer['python']等等.这些字符串0在数字上下文中变成了,因此你获得的是$answer[0],即java.
你的第一个循环:
foreach (@answer){
print "[$_]\n";
}
Run Code Online (Sandbox Code Playgroud)
迭代@answer并将每个@answer数组的当前元素放入$_循环中.结果是您@answer按顺序获得打印元素.
你的第二个循环:
foreach (@answer) {
print "$answer[$_]\n";
}
Run Code Online (Sandbox Code Playgroud)
是否使用相同的值进行相同的迭代$_.但是,这是一个很大但是,你打印$answer[$_]并且$_每次都是一个字符串,并且在数字上下文中该字符串为零,所以你实际上是这样做的:
print "$answer[0]\n";
Run Code Online (Sandbox Code Playgroud)
连续四次.因此你的四个java字符串.而你的第二块样本输出遗漏了java字符串之间的换行符.