for(1)是否总是与perl中的相同?
这是真的吗for(1)是否总是与perl中的相同?,perl,Perl,这是真的吗 或者这两个不相等有什么特殊情况吗?一个区别是(1)的也将$设置为1的值: for(1){ print 1; } do { print 1; } 另外,do返回序列中最后一个命令的值: for(1){ print $_; # prints 1 } 差不多 您可以next、last和redoafor循环,但是do不是循环——包括作为do-循环的一部分。所以在一个非平凡的块中,你不能确定。但是,这将起作用: my $x = do { 1 }; # $x = 1
或者这两个不相等有什么特殊情况吗?一个区别是(1)的
也将$设置为1的值:
for(1){
print 1;
}
do {
print 1;
}
另外,do
返回序列中最后一个命令的值:
for(1){
print $_; # prints 1
}
差不多
- 您可以
next
、last
和redo
afor
循环,但是do
不是循环——包括作为do
-循环的一部分。所以在一个非平凡的块中,你不能确定。但是,这将起作用:
my $x = do { 1 }; # $x = 1
my $y = for(1){ 1 }; # invalid
- 另外,
do
不会自动为列表中的每个成员设置$\u
,就像裸for
循环那样
你可能真的只想要普通的卷发
do {{
...
}};
它有以下好处:
- 创建词法作用域(如(1)
和do{}
)
next
、last
和redo
(如用于(1)
)$\uuu
(比如do{}
)- 它只能在需要语句的情况下使用(如(1),但不同于
)do{}
因此,
{…}
对于(1){…}来说比更有意义,do{…}
在您想要返回值时非常有用。否。它们具有不同的编译属性和不同的效果。它们仅在一个维度上相似,即它们引入的代码不会被循环——这是它们与其他构造的共同点,包括裸块和(sub{…})->()
这里有一个明显的区别:for(LIST)BLOCK
是一个循环,而do BLOCK
是一个表达式。这意味着
{
print 1;
}
不编译,而
for (1) {
say "Blurgh"
} unless 1;
是的
do {
say "Blurgh"
} unless 1;