Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
for(1)是否总是与perl中的相同?_Perl - Fatal编程技术网

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
    a
    for
    循环,但是
    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;